侧边栏壁纸
博主头像
Eoser's page! 博主等级

@学习@生活@自己

  • 累计撰写 114 篇文章
  • 累计创建 29 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

笔记:Android Activity启动模式

eoser
2023-04-04 / 0 评论 / 0 点赞 / 3 阅读 / 0 字

笔记:Android Activity启动模式

  • Android 有四种启动(加载)模式(LaunchMode):

    standard;singleTop; singleTask;singleInstance

  • 启动模式的设置方法
  • 任务栈的概念:每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序
  • 启动模式解释:
    1. standard

      每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈栈顶

激活前的任务栈 激活后的任务栈 新Activity位置
- - -
- Activity-3 新激活的Activity
Activity-2 Activity-2 -
Activity-1 Activity-1 -
  1. singleTop

    如果目标任务在其堆栈顶部已有一个 Activity 实例,那么该实例将接收新 Intent(通过调用 onNewIntent());此时不会创建新实例。在其他情况下 — 例如,如果“singleTop”的一个现有实例虽在目标任务内,但未处于堆栈顶部,或者虽然位于堆栈顶部,但不在目标任务中 — 则系统会创建一个新实例并将其推送到堆栈上。

假如接收到的Intent为激活的Activity为Activity-3 激活前的任务栈 激活后的任务栈 新Activity
- - -
Activity-3 Activity-3 激活的Activity-3
Activity-2 Activity-2 -
Activity-1 Activity-1 -
假如接收到的Intent为激活的Activity为Activity-2 激活前的任务栈 激活后的任务栈 新Activity
- Activity-2 激活的Activity-2
Activity-3 Activity-3 -
Activity-2 Activity-2 -
Activity-1 Activity-1 -
  1. singleTask

    如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop

假如接收到的Intent为激活的Activity为Activity-3 激活前的任务栈 激活后的任务栈 新Activity
- - -
- Activity-3 激活的Activity-3
Activity-2 Activity-2 -
Activity-1 Activity-1 -
假如接收到的Intent为激活的Activity为Activity-2 激活前的任务栈 激活后的任务栈 新Activity
- - -
Activity-3 - -
Activity-2 Activity-2 激活的Activity-2
Activity-1 Activity-1 -
  1. singleInstance

    Activity会单独占用一个任务栈,具有全局唯一性,后续的请求均不会创建新的Activity,这个任务栈被销毁了才回重新创建。

  • SingTask的应用:

    可以用来退出整个应用。 将主Activity设为SingTask模式,然后在要退出的Activity中转到主Activity,然后重写主Activity的onNewIntent函数,并在函数中加上一句finish。

参考资料

0

评论区