Android Activity启动模式详解

来源:互联网 发布:dms软件 编辑:程序博客网 时间:2024/06/06 18:04

在说Activity启动模式之前,先说下Activity Task栈:

Task任务栈是用来管理应用程序Activity的一个容器,可简单理解为,一个应用程序就是一个Task.

但是并不是说一个应用程序就只有一个Task,可以有多个Task,

而Activity启动模式就是基于栈的。

Activity启动模式有以下4种 :

1,Standard

2,SingleTask;

3,SingleTop

4,SingleInstance


Standard:

   activity默认启动模式,即在Androidmanifest.xml中没有对<activity>标签进行设置launchMode时,

这种模式就是每次启动都会在Activity Task栈中压入一个Activity.即使它已经存在这个栈里面,也不会复用。

onCreate()-->onStart()--onResume()-->onPostResume()


SingleTask:

  即将被激活的Activity将只存在一个Task中,不能指定其运行在另外一个Task,而这个Task的创立一般由

RootActivity即栈底的Activity来实现,比如我们应用的MainActivity,当我们把MainActivity的launchMode置为"SingleTask"

时,整个应用的Task即已被确定。且SingleTask启动模式的Activity,会在它被激活时,把位于它上面的Activity都Push出栈

这个对于返回退出应用处理很方便。

第一次创建时:onCreate()--->onStart()-->onResume()-->-->onPostResume()

第二次被激活,如果存在栈里面:

 onNewIntent()-->onResume()--->onPostResume()


SingleTop:

当启动或激活这个模式的Activity时,系统首先会从Task栈顶去找这个Activity 是否已经存在,如果栈顶存在则直接用,

onNewIntent()-->onResume()-->onPostResume()

如果栈顶不存在,即使栈里面存在这个Activity,其也会重新创建。onCreate()-->onStart()-->onResume()-->onPostResume()


SingleInstance:

 这个启动模式可以理解成与SingleTask相反,SingleTask是确保同一Task,是可以允许别的Activity存在的,

而SingleInstance是单例,单独的一个Task,单独的Activity,

如:MainActivity启动,创建的TaskId为276,点击btn跳转至A界面,A的launchMode="SingleInstance"

在A界面,getTaskId(),打印值为277

返回再点击跳转至A界面,getTaskId()=288;

当启动或激活这个模式的Activity时,系统也是首先从Task里面找,有没有存在,如果存在,则直接复用,

当点击返回时,Activity随即销毁。

onNewIntent()-->onResume()-->onPostResume()

界面跳转如下:

A-->B(singleInstance)-->C--->B

返回:

B-->C-->A

备注:当程序退出,再进入时,MainActivity中getTaskId()=289,在整个系统栈中,它是累加的,



1 0
原创粉丝点击