Android-Activity的四状态、七生命周期、和四启动模式
最后更新于:2022-04-01 11:18:06
## 一、四大基本组件简介:
Android四大基本组件:Activity、Service、Content Provider、Broadcast Receiver
Activity:活动视图
一个负责与用户交互的显示界面的组件。
Service:服务:一个没有界面、运行在后台的服务。
Content Provider:内容提供者,一个应用程序可以使用Content Provider来共享自己的数据,另一个应用想要使用该应用提供的数据时,可以通过ContentResolver来访问。
Broadcast Receiver:广播接收者:广播消息接收器,监听的事件源是Android应用中的其他组件。
## 二、概括
Android是使用任务(Task)来管理活动的,一个任务就是一组放在栈里的活动的集合,这个栈也称为返回栈,每当启动一个新的活动,它就会入栈,并处于栈顶的位置,当一个活动finish时会销毁活动,处于栈顶的活动会出栈。系统显示的总是栈顶的活动。
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714eb45fad.jpg "")
## 三、活动的四个状态
1)运行状态:当一个活动位于返回栈的栈顶时,这时活动就处于运行状态,**最不会被系统回收的就是运行状态的活动**。
2)暂停状态:当一个活动不再处于栈顶的位置,但仍然可见,弹出一个对话框或者一个不能占满屏幕的活动都会导致前一个活动处于暂停状态,**系统也不会轻易回收这样的活动,除非是内存极低的情况(回收可见的活动都会造成极不好的用户体验)**
3)停止状态:当一个活动不处于栈顶位置,且完全不可见的时候,就进入停止状态,**当内存较低时系统会回收这样的活动**
4)销毁状态:当一个活动从栈中移除后就编程销毁状态,**系统会回收这样的活动**
## 四、活动的七大生命周期
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714eb61187.jpg "")
1)onCreate() :当Activity第一次被创建时调用,完成活动的初始化操作。
2)onStart() :当用户可以看到这个Activity时调用
3)onResume() :当获得了用户的焦点时,就是用户点击了屏幕
4)onPause() :当系统准备启动或回复另一个活动时调用。在这个方法中将一些小号CPU的资源释放,保存一些重要数据。
5)onStop() :当活动完全不可见是调用,当新启动的活动时对话框式的,还处于可见时,该方法是不会被调用
6)onDestroy():活动被销毁时调用
7)onRestart():当活动有停止状态变为运行状态时调用。
测试:
打开一个对话框式的活动:
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714eb8596f.jpg "")
打印:
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714eb97438.jpg "")
当跳转到另一个活动时:
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714eba9b2c.jpg "")
## 五、四种启动模式
1)standard:默认的模式,对于使用standard模式的活动,系统不管这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714ebbbe95.jpg "")
测试:
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714ebd3192.jpg "")
当前Mainactivity的Id是40f76d48
点击第一个按钮:Id变为40f8bdc0,说明新创建了一个活动
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714ebe556c.jpg "")
2)singleTop:当活动已经处在栈顶时,再启动这个活动时直接使用它而不会再次创建这个活动的实例,可以很好的解决重复创建栈顶活动的问题
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714ec034f5.jpg "")
点击启动singleTop模式Activity时,跳到该界面,Id:40f979e8
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714ec2357d.jpg "")
再点击该界面的按钮,Id没变,说明没有创建新的实例。
3)singleTask:singleTop模式可以很好的解决重复创建栈顶活动的问题,但是当该活动没有处于栈顶时,还有可能创建多个该实例,这时就可以用singleTask模式。当活动模式指定为singleTask模式时,每次启动该活动时,系统会在返回栈中查看是否存在该活动实例,如果存在则直接使用,不存才创建。
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714ec34daf.jpg "")
测试:
点击启动singleTaskActivity,Id是:40fcd3a0
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714ec4eed1.jpg "")
再点击这个界面的按钮,跳到主界面,注意这是这个singleTaskActivity不处在栈顶,但还在栈中。
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714ebd3192.jpg "")
再重复第一步操作,依然跳到这个界面,Id没有变化。
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714ec4eed1.jpg "")
4)singleInstance:指定为singleInstance模式的活动会启用一个新的任务栈来管理这个活动。用这种模式的活动主要是为了供其他程序共享该活动,如浏览器的使用。
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714ec70eaf.jpg "")
测试:
创建一个新的应用,包含一个用singleInstance模式的activity,运行,Id是40f78bc8
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571714ec8f007.jpg "")
然后在主界面点击启动SingleInstance Activity,结果是从这个程序直接跳到该上面那个应用。
## 六、总结
掌握好活动的生命周期能清楚的知道activity当前在什么状态,这样我们就知道在什么状态该做什么。活动的启动模式各有特点,没有最好的,只有最合适的,需要根据实际情况选择合适的模式。
[源码](http://download.csdn.net/detail/u011102153/9059255)