0%

Android 启动模式归纳

启动模式对于 Android 开发是很重要的,各种启动模式之间的区别必须要掌握,这里简单的归纳一下。

  • 启动模式

    • Standard

      标准模式,不会新建 Task,会重复建立 Activity。

      A B C D -New B-> A B C D B'

    • SingleTop

      单 Task,单栈顶元素模式。

      当新建 Activity 的时候,如果该 Activity 在栈顶,那么将不会新建 activity,直接复用原有的 activity。

      A B C D -New D-> A B C D

      如果不在栈顶,那么会重新建立这个 Activity。

      A B C D -New B-> A B C D B

    • SingleTask

      在 Task 中只会有一个 Activity 的实例。

      • 如果 Task 中没有该 Activity 的实例,那么在栈顶加入新建的 Activity

      A B C D -New E-> A B C D E

      • 如果 Task 中有该 Activity 的实例,并且在栈顶,那么和 SingleTop 一样的策略

      A B C D -New D-> A B C D

      • 如果 Task 中有该 Activity 的实例,但是不在栈顶,那么这个时候新建该 Activity,会将已有的该 Activity 实例之前的 Activity 全部出栈。

      A B C D -New B-> A B

    • SingleInstance

      在该模式下,不论从哪个 Task 加载 Activity,只会创建一个 Activity 实例,并且会使用一个全新的 Task 栈来装载。

      • 要创建的 Activity 实例不存在,这个时候会创建一个新的 Task 栈,并将 Activity 实例化后放入该栈。

        A B C D -New E-> A B C D (New Task) E

      • 要创建的 Activity 实例存在,这时候系统会将该 Activity 所在的 Task 转到前台。

        注意此种模式下加载的 Activity 总是处于栈顶的,使用该模式创建的 Task 只包含该 Activity

  • Intent Flag

    • Brought to front

      如果该 Activity 的实例已经存在了但是不在栈顶,那么将会把这个 Activity 的实例转移到栈顶,如果没有的话当然就是在该 Task 的栈顶加入该 Activity 的实例了:

      注意,这里是 A 通过该 Flag 启动 B,然后 D 通过任意方式启动 B,会实现这种效果。

      A-Flag->B C D -New B-> A C D B

    • Clear top

      同 SingleTask 的启动模式。

    • New task

      同 Standard 启动模式。

    • No animation

      启动时不使用过渡动画。

    • No history

      从该 Activity 的实例跳转之后不会保留该实例在 Task 栈中:

      注意,这里是 C 通过该 Flag 启动 D,D 以任意方式启动 E 得到的结果。

      A B-Flag->C D -New E-> A B C E

    • Reorder to front

      如果 Task 栈中已有 Activity 实例,那么通过该 Flag 启动的话,会直接将其转入栈顶。

      注意这里与 Brought to front 的区别,前一个 Flag 是在第一次启动那个任务的时候设置的,这个 Flag 不需要第一次启动的时候设置,在下一次用得到的时候再设置,将已有的 Activity 转到前台。

      A B C D -Flag New B-> A C D B

    • Single top

      相当于 SingleTop 模式。

来发评论吧~
Powered By Valine
v1.5.2