- Activity生命周期
- Activity三种状态
(1)active:当Activity运行在屏幕上(处于当前任务活动栈的最上面),此时当前Activity获取了焦点能响应用户的操作,属于活动状态,同一个时刻一个应用只会有一个Activity处于活动状态(Active)。
(2)paused:当Activity失去焦点但仍对用户可见(如在它之上有另一个透明的Activity或Toast、AlertDialog等弹出窗口时)它处于暂停状态。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接),但是当系统内存极小时可以被系统杀掉,来保证系统的运行。
(3)stoped:完全被另一个Activity遮挡时处于停止状态,它仍然在内存中保留着所有的状态和成员信息。对用户不可见,当其他地方需要内存时有可能被系统杀掉。
- Activity七个生命周期方法
onCreate():
当Activity第一次被实例化的时调用,整个Activity生命周期只调用一次。通常用来初始化变量和设置,为Activity设置所要使用的布局文件,为按钮绑定监听器等需要提前做好准备的操作。
onStart():
当Activity可见但尚未获得用户焦点不能交互时调用。
onRestart():
当Activity已经停止后,重新被启动时调用。
onResume():
当Activity可见并获得用户焦点能交互时调用。
onPause():
用来存储持久数据。到这一步是可见但不可交互的,系统会停止动画等消耗CPU的任务。此方法用来保存一些数据,因为这个时候程序的优先级降低,有可能被系统收回。
onStop():
当Activity被新的Activity完全覆盖不可见时调用。
onDestroy():
当Activity(用户调用finish()或系统由于内存不足)被系统销毁时调用,(整个生命周期只调用一次)需要释放onCreate()方法中创建的资源,如结束线程等。
- Activity生命周期图
- Service生命周期
根据使用方式的不同,service有两种不太相同的生命周期
- 非绑定模式
调用Context.startService()启动,调用Context.stopService()结束。这种情况下的Service是通过其他组件调用 startService()被创建。这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它。当service被停止时,系统会销毁它,这种service的生命周期为
onCreate()→onStartCommand()→onDestroy()
- 绑定模式
以调用Context.bindService()方法建立,以调用Context.unbindService()关闭。这种情况下的Service是通过其他组件(一个客户)调用bindService()来创建的。客户可以通过一个IBinder接口和service进行通信。客户可以通过 unbindService()方法来关闭这种连接。一个service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁service,这种service的生命周期为
onCreate()→onBind()→onUnbind()→onDestroy()
service生命周期图
- BroadcastReceiver广播接收器生命周期
调用对象→实现onReceiver→结束
BroadcastReceiver的生命周期很简单,但是有一个需要特别注意的地方,就是它的生命周期只有十秒左右,如果onReceiver()方法中执行了多于十秒的操作,就有可能报出ANR(application no response 应用程序无响应)的错误信息。