配置Activity时可指定android:launchMode属性,该属性用于配置该Activity的加载模式,其属性值有:
standard 标准模式,默认加载模式
singleTop Task顶单例模式
singleTask Task内单例模式
singleInstance 全局单例模式
android采用Task来管理多个Activity,当我们启动一个应用时,android就会为之创建了一个Task,然后启动这个应用的入口(即<intent-filter.../>中配置MAIN和LAUNCHER的Activity)
android并没有为Task提供API,因此开发者无法真正访问Task,只能调用Activity的getTaskId()方法来获取它所在的Task的ID。
事实上我们可以把Task理解为Activity的栈,Task以栈的形式来管理Activity,先启动的Activity被放在Task栈底,后启动的Activity被放在Task栈顶。

1.standard 标准模式,默认加载模式
每次通过这种模式启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该实例Activity添加到当前Task栈中-这种模式不会启动新的Task,新Activity将被添加到原有的Task中。
在AndroidManifest.xml中MainActivity中添加android:launchMode=”standard”或不添加,因为standard模式为默认加载模式。

2.singleTop模式
与standard模式基本相似,但有一点不同,当将要被启动的目标Activity已经位于Task栈顶时,系统不会重新创建目标Activity实例,而是直接复用已有的Activity实例。
在AndroidManifest.xml中MainActivity中添加android:launchMode=”singleTop”

3.singleTask模式
采用这种加载模式的Activity在同一个Task内只有一个实例,当系统采用singleTask模式启动目标Activity时,有如下三种情况
如果将要启动的目标不存在,系统将会创建目标Activity的实例,并将它加入Task栈顶
如果将要启动的目标Activity已经位于Task栈顶,此时与singleTop模式行为相同
如果将要启动的目标Activity已经存在,但没有位于Task栈顶,系统将会把位于该Activity上面的所有Activity移出Task栈,从而使的目标Activity转入栈顶。
在AndroidManifest.xml中MainActivity中添加android:launchMode=”singleTask”

4.singleInstance模式
这种加载模式下,系统保证无论从那个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来装载该Activity实例。分为如下两种情况
如果将要启动的目标Activity不存在,系统会先创建一个全新的Task,再创建目标Activity实例,并将它加入新的Task栈顶
如果将要启动的目标Activity已经存在,无论它位于那个应用程序中,无论它位于那个Task中,系统将会把Activity所在的Task转到前台,从而使用该Activity显示出来.
在AndroidManifest.xml中OtherActivity中添加
android:launchMode=”singleInstance”

注:
由于篇幅较大,更详细的案例分析及Task栈的分析已上传到我的资源中
点击下载

更多相关文章

  1. [置顶] Activity的四种启动模式和onNewIntent()
  2. [Android] AIDL的使用情况和实例介绍
  3. Android Binder 简单实例
  4. Android评分控件RatingBar使用实例解析
  5. android Lollipop勿扰模式
  6. Android软键盘显示模式及打开和关闭方式(推荐)

随机推荐

  1. golang判断文件是否存在的方法
  2. 如何处理golang返回值较多问题
  3. golang判断数组是否为空的方法
  4. golang使用socket中文乱码解决方法
  5. golang 适合开发什么
  6. golang中的map是指针吗
  7. golang 是什么
  8. golang判断map是否存在的方法
  9. golang websocket失败怎么办
  10. golang判断map中key不存在的方法