android启动模式小结

启动模式

standard
标准模式,会在启动他的activity中的任务栈中创建activity实例,注意:application context是没有任务栈的。

singleTop
单栈顶模式。同一个任务栈里如果需要启动的actiivty位于栈顶,则不会实例化,而是直接调用onNewIntent。

singleTask
单任务模式。启动一个新的activity,先找对应的任务栈,未找到则new一个。再找实例,若实例存在,则该实例会调用onNewIntent,位于该实例之上的activty的全部出栈。

singleInstance
单实例模式。占有唯一的任务栈,而且也只有自己一个实例。
设置taskAffinity与默认包名不一致时,此actvity会独立出来,用户可以通过多任务管理下切换到该任务。
此实例启动的activity若查找不到匹配的taskAffinity,会为其创建新的任务栈,而一般情况下,taskAffinity与singleTask结合才有意义。

该模式下一旦未设置taskAffinity,变成后台任务栈的时候,用户是不能直接切换到此activity中的,需要通过其他任务栈intent启动。

taskAffinity
任务粘合度。其实可以理解为任务栈的唯一标识,设置后的任务栈会显示展示在用户的任务切换栏中。
除了singleInstance创建的实例所在的任务栈中可能无法没被标识,其他创建模式均会在默认任务栈中创建。
单独使用taskAffinity的standard是无效的(除了singleInstance启动的,至于原因还有待考究),需要配合singleTask使用,这样才能实现任务栈的调度。

切换tips:

点击app的图标,就是查找带有下列入口的activity所在的任务栈,再把栈顶的activity显示出来。

 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />

点击home键,可以理解为调用home activity,把其他任务栈都变成后台任务栈,变成不可见状态。想要直接打开对应的activity,可以在任务切换栏中选择对应的任务栈,或者点击桌面app图标,进入默认的任务栈。

点击back键,相当于当前任务栈中的栈顶activity弹出,弹到栈底的话,就会退到最近使用的任务栈。

ps:
adb shell dumpsys activity指令可以查看手机的任务栈状态

你可能感兴趣的:(Android,android,任务栈)