1、说明android
Activity主要的三种状态:网络
Running(运行):在屏幕前台(位于当前任务堆栈的顶部)优化
Paused(暂停):失去焦点但仍然对用户可见(覆盖Activity多是透明或未彻底遮挡).net
Stopped(中止):彻底被另外一个Activity覆盖blog
2、事件方法链生命周期
2.1 进入Activity事件
onCreate -> onStart -> onResume内存
2.2 BACK键ci
onPause -> onStop -> onDestroy资源
2.4 休眠/恢复
休眠: onPause
恢复: onResume
未设置android:configChanges:
onPause -> onStop -> onDestory -> onCreate -> onStart -> onResume
设置了android:configChanges="orientation|keyboardHidden":
不会触发生命周期方法,参见文章这里。
2.6 来电来电,显示来电界面:
onPause -> onStop
关闭电话界面,从新回到当前Activity:
onRestart -> onStart -> onResume
2.7 其余Activity进入下一个Activity:
onPause -> onStop
从其余Activity返回至当前Acitivity:
onRestart -> onStart -> onResume
3、与Activity生命周期结合的应用场景
3.1 与广播(Broadcast)结合
在onResume注册广播(registerLinstener),在onPause注销广播(unregisterLinstener)。 例如:
作"摇一摇"功能(传感器)、监听网络变化,就能够在onResume中注册监听,在onPause里注销掉,已节省资源提升效率。
3.2 与服务(Service)结合
在onStart绑定服务(bindService),在onStop中取消绑定(unbindService)。 例如:
须要经过Service定时更新UI上的数据,而Activity的可见周期在onStart与onStop之间,那么就能够再onStart时启动服务,在onStop时中止服务。为了节约系统资源,除了提升用户体验之外,开发人员应尽量的优化程序。
3.3 与Cursor结合
使用managedQuery让Activity帮你管理Cursor的生命周期,不用本身去close。但也有一些问题,补充两篇文章:这里1、 这里2。
3.4 释放资源
能够在onDestory中释放一些资源。好比能够在onDestory时调用MediaPlayer的release。
4、注意
4.1 全部Activity生命周期方法的实现都必须先调用其父类版本。
4.2 因为Activity常常会暂停和恢复之间切换,因此onResume和onPause这两个方法应当是轻量级的。
4.3 在系统再某种紧急状况下须要回收内存,onStop、onDestory可能不会被调用,所以须要在onPause中把须要长期保存的数据保存起来。