Activity与Activity调用栈分析

本文详细介绍了Android中Activity的四种状态及生命周期回调方法的作用,包括如何使用onSaveInstanceState和onRestoreInstanceState来保存和恢复Activity状态,以及singleTop、singleTask和singleInstance等启动模式的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于Activity与Activity调用栈分析的一些总结:
1. Activity的四种形态:Active/Running 、Paused 、Stopped和Killed
2. onPause():释放系统资源,如Camera、sensor、receivers;
onResume():需要重新初始化在onPause()中释放的资源;
3. 如果系统长时间处于stopped状态而此时系统需要更多的内存或者内存极为紧张的时候,系统会回收你的Activity,而此时为了补偿,会将Activity状态通过onSaveInstanceState()方法保存到Bundle对象中,当然也可以增加额外的键值对存入Bundle对象以保存这些状态。当需要重新创建这些Activity的时候,保存的Bundle对象就会传递到onRestoreInstanceState()与onCreate()方法中。这也是onCreate()方法中参数—Bundle savedInstanceState的来源。
当然如果Activity已经finish掉的话就不会再调用onSaveInstanceState()方法。
4. singleTop模式适用于接到消息后显示的页面,这种启动模式,系统会判断当前栈顶Activity是不是当前Activity ,如果是就不会重新创建Activity实例,而是调用该实例的onNewIntent()方法。
5. singleTask模式是检测整个Activity栈中有没有需要启动的Activity,如果有,就将该Activity置于栈顶,并把该Activity以上的Activity都销毁。所以这种启动模式通常可以用来退出整个应用:将主Activity设置为singleTask模式,然后再要退出的Activity中转到主Activity,从而将主Activity之上的Activity都清除,然后重写主Activity的onNewIntent()方法,在方法中加上一句finish(),将最后一个Activity结束掉。
心得:不用这种模式做退出 主Activity也应该可以设置为这种模式,在用户不断的切换页面的时候尽量的释放掉内存。特别是如果首页创建比较耗费资源,又必须存在,是作为其他页面打开的一个入口就可以。暂时还没想到有什么弊端
6. singleInstance模式:申明为singleInstance模式的Activity会出现在一个新的任务栈中,而且该任务栈中只存在这一个Activity。
举例说:如果应用A的任务栈中创建了MainActivity实例,并且启动模式为singleInstance,如果应用B也要激活MainActivity,则不需要创建,两个应用共享该Activity实例。这种启动模式常用于需要与程序分离的界面。
另外,关于singleTop和singleInstance这两种启动模式:如果在一个singleTop或者singleInstance的ActivityA中通过startActivityforResult()方法来启动另外一个ActivityB,那么系统直接返回Activity.RESULT_CANCLED而不会再去等待返回。因为不同Task之间,默认不能 传递数据,如果非要传递,那就通过Intent来绑定数据。
7. 清空任务栈:
clearTaskOnLaunch:顾名思义,就是每次在返回该Activity时,都将该Activity之上的所有Activity都清除。这个属性,可以让这个Task每次在初始化的时候,都只有这个Activity。
finishOnTaskLaunch:与上面属性类似,不过clearTaskOnLaunch作用在别人身上,finishOnTaskLaunch作用在自己身上。当离开这个Activity所处的Task,那么用户再返回时,该Activity就会被finish掉。
alwaysRetainTaskState: 这个属性给 Task一道“免死金牌”,如果Activity的这个属性是True,那么该Activity所在的Task将不接受任何清理命令,一直保持当前的Task状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值