当你想跨入高级开发的时候,你会发现,你总是会欠缺很多基础的东西.
本文章将会将Activity的生命周期分为两部分进行讲解.一种是典型情况下.另一种是异常情况下的.
典型情况的生命周期是指:
由用户参与的情况下,Activity所经历的生命周期的改变.
异常情况是指:
Activity被系统回收或者是由于当前设备的Configuration发生改变从而导致Activity被销毁重建.
典型情况
在正常情况下,Activity会经历如下的生命周期
- onCreate:表示Activity正在被创建,这是生命周期的第一个方法.在这个方法中我们可以做一些初始化操作.例如去设置加载布局资源(setContentView()),初始化Activity所需要的数据等.
- onRestart:表示Activity重新被启动.一般情况下,当当前的Activity从不可见到可见的情况下就会调用onRestart()方法.这种情形一般都是用户的一些行为导致的,例如用户按下home键,又重新进入App,或者是用户打开新的页面,又按返回按钮,重新回到之前的页面就会出现这种情况
- onStart:表示Activity正在被启动,即将开始,这是Activity已经可见了,但是还没有出现在前台.还无法和用户交互.我们可以理解为,Activity已经出现了,但是我们看不到.
- onResume:表示Activity已经可见了.并且出现在了前台.已经可以活动.这个跟onStart()都是可见了,但是区别在于后者是可以看到了,前者还不可以看到.
- onPause:表示Activity正在停止.正常情况下,紧着着onStop方法也会被调用.此时可以进行过度动画,存储数据等操作.但是注意一定不能耗时,不然会影响新的界面的展示.因为只有在之前onPause方法执行完毕,新的界面的onResume才会执行.
- onStop:表示Activity将要停止,可以稍微做些重量级的回收工作.不能太耗时.
- onDestroy:表示Activity即将被销毁,这是Activity生命周期方法的最后一个回调.在此时我们可以做些回收工作和资源释放等.
正常情况下,生命周期只有上边的七个,下图会进行说明.
针对此图在做些说明.
- 针对一个特定的Activity,回调方法顺序如下.onCreate()–>onStart()–>Resume();
- 当用户打开新的Activity或者切换到桌面的时候,回调顺序如下onPause()–>onStop();(如果遇到特殊情况,例如该Activity采用了透明的主题的话,那么就不会调用onStop()方法);
- 当用户再次回到之前的Activity的时候,回调方法如下onRestart()–>onStart()–>onResume();
- 当用户点击back键的时候,当前Activity的回调方法如下:onPause()–>onStop()–>onDestroy();
- 当Activity被系统回收并重新打开的时候生命周期是onCreate()–>onStart()–>Resume();(只是生命周期方法一样,过程不一样)
- 从整个生命周期来说.onCreate()和onDestroy()是配对的,分别标识着Activity的创建和销毁.并且只可能有一次调用.从是否可见来说onStart()和onStop()方法是配对的.随着用户的操作或者屏幕电量和熄灭,这两个方法会被调用多次.从是否在前台来说.onResume()和onPause()是配对的.随着用户的操作或者屏幕的点亮和熄灭,这两个方法会被调用多次.
一个Activity被打开的方法调用
04-08 03:26:42.873 1735-1735/cn.yuan.xiaoyu I/AActivity: onCreate()
04-08 03:26:42.873 1735-1735/cn.yuan.xiaoyu I/AActivity: onStart()
04-08 03:26:42.875 1735-1735/cn.yuan.xiaoyu I/AActivity: onResume()
A界面打开B界面方法调用
04-08 03:29:35.362 4205-4205/cn.yuan.xiaoyu I/AActivity: onPause()
04-08 03:29:35.406 4205-4205/cn.yuan.xiaoyu I/BActivity: onCreate()
04-08 03:29:35.407 4205-4205/cn.yuan.xiaoyu I/BActivity: onStart()
04-08 03:29:35.408 4205-4205/cn.yuan.xiaoyu I/BActivity: onResume()
04-08 03:29:36.194 4205-4205/cn.yuan.xiaoyu I/AActivity: onStop()
B界面按back键
04-08 03:30:32.405 4205-4205/cn.yuan.xiaoyu I/BActivity: onPause()
04-08 03:30:32.438 4205-4205/cn.yuan.xiaoyu I/AActivity: onRestart()
04-08 03:30:32.438 4205-4205/cn.yuan.xiaoyu I/AActivity: onStart()
04-08 03:30:32.438 4205-4205/cn.yuan.xiaoyu I/AActivity: onResume()
04-08 03:30:33.070 4205-4205/cn.yuan.xiaoyu I/BActivity: onStop()
异常情况
资源相关的系统配置发生改变导致Activity被杀死并重新创建
在默认情况下,如果我们的Activity不做特殊处理,那么当系统配置发生改变后,Activity就会被销毁并创建.如图所示:
当系统配置发生改变后,Activity会被销毁,其onPause(),onStop(),onDestroy()均会被调用.同时由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity的状态,这个方法的调用时机是在onStop()之前,这个方法只有在发生异常情况下才会调用,正常情况下,不会调用这个方法.当Activity重新被创建成功之后,系统会调用onRestoreInstanceState(),并且把Activity销毁时onSaveInstanceState()方法所保存的bundle对象作为参数同时传递给onRestoreInstanceState()和onCreate()方法.
作者:EaskShark 发表于2017/4/8 16:27:33 原文链接
阅读:184 评论:0 查看评论