Android的activity有四种启动方式,standard、singleTop、singleTask、singleInstance。
task可以跨应用、跨进程。
1、standard
标准启动模式,也是系统默认启动模式。该模式下启动同一个activity,会在栈中产生多个该activity的实例,每个实例都会处理一个intent对象。如果Activity A的启动模式为standard,在A中再次启动Activity A,会在A的上面再次启动一个Activity的实例。当前栈中的状态为 A --> A。
2、singleTop
如果启动的activity已存在于任务栈的栈顶,那么再启动这个activity不会创建新的实例,而是重用栈顶的那个实例,并且会调用该activity的onNewIntent方法。
3、singleTask模式。
如果存在这样的一个任务,则检查在这个任务中是否已经有了一个SecondActivity的实例,
如果已经存在一个SecondActivity的实例,则会重用这个任务和任务中的SecondActivity实例,将这个任务调到前台,清除位于SecondActivity上面的所有Activity,显示SecondActivity,并调用SecondActivity的onNewIntent();
如果不存在一个SecondActivity的实例,会在这个任务中创建SecondActivity的实例,并调用onCreate()方法
如果不存在这样的一个任务,会创建一个新的affinity为com.jg.zhang.androidtasktest.second的任务,并且将SecondActivity启动到这个新的任务中
4、singleInstance模式
以singleInstance模式启动的Activity具有全局唯一性,即整个系统中只会存在一个这样的实例。
以singleInstance模式启动的Activity具有独占性,即它会独自占用一个任务,被他开启的任何activity都会运行在其他任务中。
被singleInstance模式的Activity开启的其他activity,能够开启一个新任务,但不一定开启新的任务,也可能在已有的一个任务中开启。取决于开启的activity的taskAffinity任务是否存在。
待扩展问题:
1、Application,Task和Process的区别与联系
2、allowTaskReparenting
3、intent action隐式启动
参考文章:
1、Android中Activity四种启动模式和taskAffinity属性详解