侧边栏壁纸
博主头像
Stars-One的杂货小窝博主等级

所有的创作都是有价值的

  • 累计撰写 276 篇文章
  • 累计创建 46 个标签
  • 累计收到 27 条评论

目 录CONTENT

文章目录

Android singleTask和singleTop启动模式

Stars-one
2024-05-20 / 0 评论 / 0 点赞 / 59 阅读 / 2083 字

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 处于暂停状态,用户可以通过切换将后台任务栈再次调到前台。

0

评论区