android 四种启动模式 记录一下

android 四种启动模式:

  • standard
  • singleTop
  • singleTask
  • singleInstance

为activity设置启动模式,防止创建大量重复的activity

设置方法

在AndroidManifest.xml中为对应的activity标签设置android:launchMode属性

模式解释

  • standard

这种是默认启动模式,在这种模式下,会重复创建相同的activity

一个activity A

无论A是否已经存在,创建A时,都会新建A

例如A中一个按钮,可以跳转到A,

每点击一次都会新建一个A在栈顶

  • singleTop

在这种模式下,不允许activity叠加,但是可以有重复

两个activity A B ,两个activity中都有按钮可以跳转到A B

若A在栈顶,点击按钮跳转到A ,这时不会新建A 二是调用A的onNewIntent

点击跳转到B,会新建一个B

若A,B已存在,B在栈顶,点击按钮跳转到A,这时会新建A

也就是说此时有两个A的实例存在

用他人博客的例子:

操作:A -> B -> B
实际:A -> B (第二次跳转B,因为B在栈顶所以不会新建B而是调用B的onNewIntent方法)

操作:A -> B -> A -> B
实际:A -> B -> A -> B

  • singleTask

这种模式下只有一个实例,若在同一个应用中启动ta,且其Activity不存在,会在同一个task下新建一个,其Activity已存在,在activity栈中,会将其之上的activity销毁并调用他的onNewIntent方法

用他人博客的例子:

三个activity A B C,其中都有按钮可以跳转到A B C

操作:A -> B -> C
实际:A -> B -> C -> B

操作:A -> B -> C -> B
实际:A -> B (最后一次跳转B时,将C销毁同时调用B的onNewIntent方法)

  • singleInstance

只会有一个实例,这个实例在一个task中,且这个task中不会有其他activity

他人博客例子:

两个activity A B ,B为singleInstance模式

操作:A -> B
实际:A (假设task的ID为0) -> B (新建一个task,ID为1)

操作:其他应用 -> B -> A
实际:其他应用(假设task的ID为0) -> B (新建一个task,ID为1)-> A(新建一个task,ID为2)

自己遇到的相关问题

在写一个App的时候发现,每次App转到后台在回到前台都会刷新在栈顶的activity,后来才发现启动模式是默认的standard模式,每次都会新建一个activity,后来根据需求改成singleTask模式就OK了

最后

写这个博客是为了加深自己对启动模式的理解和记忆,文中有借鉴他人的博客也加上了一些自己遇到的问题,在此记录一下

他人博客:http://blog.csdn.net/shinay/article/details/7898492/

更多相关文章

  1. 2012-7-17 固定屏幕显示模式Android: ScreenOrientation,全屏
  2. 原生态Android操作介绍之一
  3. Android软键盘显示模式及打开和关闭方式
  4. Android应用开发Android 常见的设计模式
  5. Android 封装的数据库管理操作类

随机推荐

  1. Android设计模式2--工厂方法模式
  2. android高级应用课程大纲
  3. android 系统隐藏和显示虚拟按键的几种方
  4. Android(安卓)驱动和系统开发 2. 解析模
  5. [翻译]Android单手指缩放-第一部分(Androi
  6. Flutter学习六之实现一个带筛选的列表页
  7. 浅析android适配器adapter中的那些坑
  8. Android从驱动层到应用程序层的通信
  9. Android(安卓)View获取坐标值、相对距离
  10. Android(安卓)极光IM-基础篇