关于Activity的lunchMode

我们都知道Activity的启动模式有四种:standard,singleTop,singleTask和singleInstance,书上也有介绍,主要是通过Activity栈和内存地址来分析的,不过我觉得从Activity的生命周期,以及Activity前台与后台的切换来理解也不错。

1.标准模式standard

该模式是默认的启动模式,即xml中不配置Activity的launchMode属性,那么就是标准的启动模式。那么标准模式下Activity的生命周期是什么样的呢,首次启动onCreate()->onStart()->onResume(),灭屏后onPause()->onStop(),亮屏onRestart()->onStart()->onResume(),按home键切到后台,onPause()->onStop()->onDestroy(),尽管从任务列表还可以看到该Activity,实际上它已经被销毁了,点击该Activity,生命周期是onCreate()->onStart()->OnResume(),等于又创建了一个新的Activity,所以使用标准模式,就需要考虑在应用被切到后台的时候,重写onSaveInstanceState()来保存数据,向bundle中写入数据,然后再读取。由此可见,标准模式是不支持后台运行的。如果是使用intent来启动该模式的Activity,那么不管当前任务栈中有没有该Activity的实例,都会创建一个新的Activity实例。

2.singleTop

这种模式的启动后生命周期同上,不过按下home键后,生命周期如下:onPause()->onStop(),从任务列表中再次启动该Activity,周期是onRestart()->onStart()->onResume,尽管该Activity不是位于任务列表的第一个。可见,该模式是可以支持后台运行的。如果是通过intent来启动Activity,那么如果之前创建的Activiy对象没有位于栈顶,那么就会重新创建对象,从任务列表启动Activity,可以理解为是否支持create_from_history。

3.singleTask

启动onCreate()->onStart()->onResume(),切换后台onPause()->onStop(),从任务列表启动onRestart()->onStart()->onResume()。从切换后台前台后的生命周期,以及Activity的数据来看,与singleTop没什么差异,都可以保存数据。不过通过intent来启动的Activity会根据当前活动栈中是否有该Activity实例,来决定是否重建Activity对象。

4.singleInstance

该模式下启动,灭屏,亮屏,后台,前台,所经历的生命周期与singleTop,singleTask一样,也可以保存之前的数据,支持后台。该模式与上述模式的差异,主要还是在任务栈,如果用intent启动这样的一个Activity,那么系统会创建一个新的任务栈,该任务栈中只存放该Activity的一个instance。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值