Android的四种启动模式, 在5.0之前和之后变化挺大的, 而且各种不好理解和记忆, 我们了解了它的核心思想之后会对掌握四种启动模式有有很大的理解上的帮助.
核心思想:
- 所谓的启动模式, 默认都是以调用者为准的, ActivityRecord默认是建立在调用者的Task中的.
比如一个应用A的Activity启动模式是Standard, 另一个应用B启动A中这个Activity, 那么会在B的task中生成这个ActivityRecord.
如果A中这个Activity的启动模式是SingleTop, 另一个应用B去启动这个Activity, 系统回去检查B的task栈顶是否存在这个ActivityRecord, 而不是去管A这个Task, 即使A这个Task的栈顶已经存在这个ActivityRecord, 但是B的Task栈顶不存在, 还是会在B的Task栈顶中生成这个ActivityRecord.
- 使用了SingleTask或者Flag中添加了NEW_TASK标志
这只是告诉系统, 可以优先在新的Task中建立这个Activity, 并不一定要在调用者的Task中去建立.
还是以A中Activity的启动模式是SingleTask, 另一个应用B去启动这个Activity.
如果这个Activity已经在A的Task中存在了, 则把A的Task推到前台, 并且清空这个Activity之上的所有Activity, 然后调用这个Activity的onNewIntent方法.
如果A的Task中不存在这个Activity, 则在A的Task中建立这个Activity, 并且把A这个Task推到前台.
如果这个Activity指定了taskAffinity, 那么就不是用A这个Task去判断了, 而是用指定的taskAffinity去判断.
- SingleInstance
这个的含义是无论如何都要在一个新的Task中启动这个Acitivity, 这个Activity在系统中是唯一的, 如果这个Task不存在, 就创建并推到前台. 如果这个Task存在,就直接推到前台.
使用startActivityForResult或导致一些launchMode失效, 因为这个会要求把一些东西返回给调用者
网友评论