第12天 Android Activity学习 1



    Activity通常是学习Android写demo时遇到的第一个类,知名程度可以与经典的打印“Hello World”相媲美,毕竟在Android中即使想在界面上显示一个“Hello World”,也必须先创建Activiy子类在其onCreate方法中创建视图,在视图上添加文字“Hello World”。哈哈,接下来就来看看Android 的四大组件使用频率最高的Activity吧。

一、Activity是什么?

    首先会提出一个问题,Activity到底是什么?
    如果回答Activity四大组件之一也是使用频率最高的组件,这个答案显然令人不满意,那Activiyt到底是什么呢?来看看官方的解释:

    Activity是与Android app提供交互的重要组件。Activity负责创建一个窗口,在这个窗口基础上开发者可以通过setContentView添加UI,Activity默认全屏显示也可以作为浮动窗口显示。
    Activity存在的目的是为了降低耦合,把用户自定义与系统调用分离开。

    例如Activity提供如下处理:
    控制窗口层级与显示关系(例如当前页面有多个弹出窗口,多个Toast每个Dialog与Toat都是新的窗口)
    在窗口中按照创建setContentView传递View对象创建界面。
    在窗口与视图上处理触摸事件、硬键盘事件、滚轮事件。
    在当前视图进行绘制、响应窗口所有事件。
    控制输入法在当前窗口的显示与隐藏。
 
    Activity是UI吗?
    按我的理解不是,这个问题引出另外一个概念UI (User Interface),如果把UI粗浅的理解话搞美术的人画出来的美术作品的话,Activity相当于画架主要是对画出作品时起到支撑作用,但是并不能说画架就是画作本身。

二、Activity的生命周期

通过以下的文章与图片可以了解Activity生命周期具体有哪些,并且每一个的含义是什么,但是还是会发现有两个疑问:

疑问一:
    为什么要有生命周期呢?而且为什么生命周期还要提供这么多方法呢?Android Framework层本身本身就是基于Java的难道不能只提供一个入口,例如mian函数吗?
    答案是Android可以提供周期回调,可以仅提供一个入口其实进把onCreate当做入口就行了,那为什么要提供生命周期这么多回调呢?按我的理解是因为提高性能对现有的对象进行复用。
    Android完全可以仅提供一个接口创建,如果当前Activity处于被遮盖的情况直接把当前Activty给杀死清理掉,但是这样会导致用户再点击回退按钮想看到之前的Acitivyt展示的页面上时,因为被遮盖时给清理掉所以要重新创建,这样消耗资源倒是小事,主要是这个过程肯定要消耗时间,而且这段时间用户也只能等待带来用户体验不好。

疑问二:
    Dialog的显示与隐藏会执行Activity的哪些回调方法?
    按照对Activity生命周期的理解,当Activty界面被部分遮盖的时候会执行onPause,遮盖消失时会执行onResume,但是如果写个Demo并在相应周期方法中打印log会发现Dialog的显示与隐藏不会触发任何的生命周期方法。
    从现象说明了对遮盖触发Activiyt周明周期理解有误,Dialog虽然会遮盖不会触发生命周期方法。但是有些文章中给出的效果图中能看到仅仅一个Dialog浮现在手机屏幕中间,但是onPause与onResume也执行了。这是因为遮盖的Dialog形状的界面其实是Activity 其style格式设置为theme.Dialog,即Activity以Dialog形式仅占据屏幕的中间位置显示并不占满全屏。新的Activity的遮盖当前Activity当然会触发onPause与onResume。


两分钟彻底让你明白Android Activity生命周期(图文)!


Managing the Activity Lifecycle
http://developer.android.com/training/basics/activity-lifecycle/index.html

Starting an Activity
http://developer.android.com/training/basics/activity-lifecycle/starting.html

Pausing and Resuming an Activity
http://developer.android.com/training/basics/activity-lifecycle/pausing.html

Stopping and Restarting an Activity
http://developer.android.com/training/basics/activity-lifecycle/stopping.html

Recreating an Activity
http://developer.android.com/training/basics/activity-lifecycle/recreating.html


    


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。