自己的总结,请支持原创
四种启动模式生命周期
我们先来一张最简单的跳转的APP界面图
相信只要有一点安卓基础的人都会设计出来上述的界面,就不上代码了。
Standard
Activity01是标准模式,首次点击activity01按钮
执行结果图如下:
再点击一下activity01按钮
singleTop
Activity02的模式是singleTop
依次开启01>02>02生命周期如下:
01运行了onStop();
这种0202紧挨着复用 ,复用的时候运行了onNewIntent()和onResume()函数。
依次开启02>01>02
01最后是运行了onStop()函数。
singleTask
依次开启02>01>02
杀死02之上的01,再复用02,注意这种0202不是紧挨着复用,复用02依次调用的是onNewIntent(),onStart(),onResume()三个函数;而不是仅onNewIntent(),onResume()两个。
依次开启01>02>02
注意这种0202紧挨着复用情况下的复用会调用
onNewIntent(),onResume()两个,而不是onNewIntent(),onStart(),onResume()三个。而01最后是运行了onStop()函数。
singleInstance
一个task里只有一个activity实例,所以开启同一个activity时是复用已经有的activity。
依次开启01<02<02
- 注意这里复用的时候调用的是三个函数。onNewIntent(),onResume(),onStart()
而01最后是运行了onStop()函数。
2、各自的适用场景
每一种启动模式有对应的应用场景,一定得清楚。 - singleTop
适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。 - singleTask
适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。之前打开过的页面,打开之前的页面就ok,不再新建。 - singleTask:a界面购物,b界面确认订单,c界面付款,如果付款成功会跳到a,如果不付款则返回b,这时候重启a就会用到singleTask。
- singleInstance
适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。