singleTask
模式会保证整个应用中只有一个目标Activity的实例存在,适用主页面的Activity
singleTop
模式会保证在任务栈的顶部只有一个目标Activity的实例存在,适用新闻详情页(从通知进入)
singleTask模式
当Activity不存在栈中,会重新创建一个新的Activity实例,并将当前任务栈中的其他Activity对象直接清空(出栈),保证只有当前一个Activity实例
如果Activity存于栈中,会调用onNewIntent()方法,将对应的intent数据传递进来,不会创建一个新的Activity实例
实际效果为,保证启动的Activity为单例,适用app的入口类Activity(主页)
singleTop模式
启动Activity的时候,会检测该Activity存在任务栈的顶部,如果不存在,则会创建一个新的实例,并放置任务栈的顶部(相当于此时会有2个同类型的Activity实例)
如果已经位于任务栈的顶部,则会调用onNewIntent()方法,将对应的intent数据传递进来,不会创建一个新的Activity实例
实际效果会保证Activity处于栈顶
singleInstance模式
Activity启动为此模式的话,会保证当前Android系统中只会有一个实例,系统会将此Activity实例放在一个特殊的任务栈中
关于任务栈
默认情况下,所有 Activity 所需的任务栈的名字为应用的包名。我们可以在AndroidManifest文件中,为每个 Activity 都单独指定 TaskAffinity 属性,这个属性必须不能和包名相同,否则就相当于没有指定。
TaskAffinity 属性主要和 singleTask 启动模式或者 allowTaskReparenting 属性配对使用。
另外,任务栈分为前台任务栈和后台任务栈,后台任务栈中的 Activity 处于暂停状态,用户可以通过切换将后台任务栈再次调到前台。
评论区