android 四种启动模式

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/

你可能感兴趣的:(Android)