Android 学习之路(九)---- Android启动模式
前台Task进入后台,按Home键到桌面或者按任务栏键进入任务列表
这里可能涉及task切换以及app的切换
启动模式
默认规则:在不同Task中打开同一个Activity,Activity会被创建多个实例,分别放进每一个Task中
1. standard 和 SingleTop
这两个因为只能在应用的自己栈里创建(除设置了taskAffinity),standard会直接创建一个,所以这里会调用onCreate()
方法。SingleTop与standard区别在于如果创建的Activity在栈顶能够找到实例,则复用这个实例,因此不会调用onCreate()
,会调用onNewIntent()
,因此连续创建同一个Activity实例会复用同一个实例。
3. SingleTask
SingleTask涉及不同的Task的跳转,也涉及同一个Task的一些行为
如果是两个app之间使用对方的Activity,被标记的SingleTask的Activity在自己应用的Task中创建,并将整个Task栈放到创建这个Activity的Task栈的上面,保证了被标记的SingleTask的Activity总会在自己的Task中,而且保证自己的Task只存在一个实例就会将Activity上面的Activity实例出栈。该方式打开是应用间的动画,当使栈切换到后台就会将两个Task的栈分开。
如果是自己的应用创建本应用的Activity,则会复用task存在的Activity(不存在则创建新的Activity),在栈里,本实例以上的Activity实例都会被出栈,回收。
4. SingleInstance
SingleInstance只涉及不同的Task的跳转
当创建一个新的被标记SingleInstance的Activity时,会创建一个新的Task,而且只放入这一个Activity实例。并且将本栈放在启动该Activity的Task上面(不是入栈,相当于在将前台栈遮住显示覆盖的Task),当使栈切换到后台就会将两个Task的栈分开,但是由于Activity的taskAffinity与应用的Task的taskAffinity一样,冲突,所以它不会显示在任务栏中,会隐藏,但是不会被销毁。所以在任务栏看不到的任务不代表死亡。
5. 流程图
这里展示了不同应用使用标记SingleTask,以及SingleInstance的task的情况,只涉及不同应用启动这两个标记了的Activity的方式,以及切换后台的情况,大家可以自己使用真机能够更加直观。
PDF链接:
https://download.csdn.net/download/m0_58860979/88958744