一
1.在activity的生命周期中存在四种状态,分别为运行、暂停、停止和不存在。每次状态转换Activity方法会发消息通知activity。
回退键会调用onDestory()方法,Home键会调用onStop()方法
- 当处于运行状态的Activity可以用户交互
- 当处于运行或暂停状态的Activity用户可见
- 当处于运行、暂停、停止状态的Activity存在,有内存实例
2.任何时候只有一个Activity处于用户能交互的运行状态。通过覆盖onCreate(Bundle)方法可以预处理一些UI相关工作如:
- 实例化组件并将其放在屏幕上
- 引用实例化组件
- 为组件设立监听
- 访问外部数据模型
二
当第一个Activity跳转到第二个Activity时,首先执行的是第一个Activity的OnPaused方法,然后执行第二个Activity的OnCreate、OnStart、OnResumed方法,等到第二个Activity完全加载完毕(可显示状态)以后才会执行第一个Activity的Onstopped方法,当然跳转过程不会使第一个Activity被销毁。
当从第二个Activity返回到第一个Activity时,首先执行的是第二个Activity的OnPaused方法,然后调用第一个Activity的OnRestart方法、OnStart方法、OnResumed方法,最后第一个Activity已经加载完毕(可显示状态),调用第二个Activity的OnStopped、OnDestroy方法来销毁它。
设备旋转与Activity生命周期
1.横竖屏切换
2.保存数据
覆盖protected void onSaveInstanceState(Bundle outState)
除非按后退键,不然该方法将在onStop()方法被调用之前调用。在创建Activity时
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(saveInsatnceState);
......}
我们通过调用activity超类方法,通过接受传入的bundle,取出保存在bundle的视图状态数据,activity的视图得以构建。
方法protected void onSaveInstanceState(Bundle outState)
默认要求将所有activity视图将自身状态数保存到Bundle中,Bundle存储字符串和限定类型值的映射关系。覆盖该方法,将一些需要保存的数据也写入Bundle,在再次创建时也可取出。该方法会在按Back键或是系统突然崩溃时失效。
activity内存清理现状
- 在低内存状况下,Android直接从内存清除整个应用系,连带自身的所有activity.目前Android还做不到只删除单个Activity
- 进程存在优先级:运行>暂停>停止.当需要释放资源首先目标时低优先级的进程。用户体验至上,操作系统不会杀掉带有可见activity的进程。除非重启或死机。