您的位置:首页 > 其它

Activity生命周期-基于实验的最新总结

2015-07-25 14:17 232 查看
不说太多废话,先上两张最基本的图吧









简单说明一下:
1. onCreate()

它会在活动第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如说加载布

局、绑定事件等。

2. onStart()

这个方法在活动由不可见变为可见的时候调用。

3. onResume()

这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的

栈顶,并且处于运行状态。

4. onPause()

这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方

法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度

一定要快,不然会影响到新的栈顶活动的使用。

5. onStop()

这个方法在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如

果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop()

方法并不会执行。

6.
onDestroy()

这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。

7.
onRestart()

这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了

8. onSaveInstanceState:

当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候。

注意上面的双引号,何为“容易”?言下之意就是该activity还没有被销毁,而仅仅是一种可能性。这种可能性有哪些
1、如下场景2 :一个正常的activity启动 ,然后按home键(或者长按home键启动其它程序)
2、如下场景3:一个正常的activity启动,然后按电源键关闭屏幕显示
3、如下场景5:启动一个新的Activity
4、如下场景6:横竖屏切换

总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。
9. onRestoreInstanceState:
需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,onRestoreInstanceState被调用的前提是,activity A“确实”被系统销毁了(参考场景6),而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity
A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行。 另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原

场景验证:
场景1、一个正常的activity从启动到销毁(back),椭圆是启动,方块中是销毁



场景2、一个正常的activity启动
,然后按home键(或者长按home键启动其它程序)



再重新启动



场景3、一个正常的activity启动,然后按电源键锁屏,然后在打开屏幕解锁平(发现其实和按home键一样)



场景4、一个正常的activity启动,然后下拉状态栏,生命周期不变



此时,点击通知栏中的通知进入到别的应用,然后再返回



场景5、点击MainActivity中的按钮进入下一个Activity(名字为ActivityOne),然后再返回
分两种情况:
第一种:





第二种:





场景6、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏也只执行一次





场景7、设置Activity的configChanges为“orientation|keyboardHidden|screenSize”时,
切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
注意:
自从Android 3.2(API 13),screen size也开始跟着设备的横竖切换而改变。所以,
在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,
如果你想阻止程序在运行时重新加载Activity,除了设置”orientation“,你还必须设置"ScreenSize"。
4.2的话,如果有问题可以再加上一个"layoutDirection"测试





总结:

其实网上关于Activity生命周期的知识很多,但是大部分内容要么不全,要么已经过时,现基于已有内容,做了部分归纳更正,希望可以方便大家学习,欢迎评论拍砖

相关链接:
Fragment生命周期-基于实验的最新总结

Activity的四种启动模式-图文并茂

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: