Android 初学activity的启动模式

原创 2016年08月31日 10:20:14

  今天学习了一下activity的LaunchMode,突然就想尝试一下在博客上记录一下,所以参考Android开发艺术探究,写下了这篇文章,相当于一个总结!!

首先,默认情况下,我们会发现activity会保持”后进先出“的情况,即使是启动同一个活动,也会重复创建多个实例,这显然不合理,所以提供了启动模式来处理这个问题。启动模式有四种:standard,singleTop,singleTask,singleInstance:

(1)standard:

标准模式,也就是默认的启动模式,你每启动一个activity就会创建一个实例入栈,返回的时候,会遵照“后进先出”的原则。

(2)singleTop:

栈顶复用模式,这种模式下,会判断activity是否位于任务栈的栈顶,如果位于栈顶,则不会创建新的实例,同时onNewIntent()方法会被回调,如果不位于栈顶的话,则会重新创建该activity的实例。

(3)singleTask:

栈内复用模式,相比于其他模式,这是最为复杂的一种模式。这是一种单实例模式,该模式下,如果任务栈中存在该activity的实例的话,多次启动都不会创建新的activity实例,同时也会调用onNewIntent(),实例不存在的话,则会创建新的实例。该模式同时会请求需要的任务栈,任务栈不存在的话,会先创建任务栈后,在创建activity实例入栈。singleTask具有clearTop的效果,例如,以singleTask启动activity A,在A之上的活动都会被清除出栈。

singleTask启动模式中,activity需要的任务栈是根据TaskAffinity标识名字的,该属性默认值是包名,如果单独设置的话,不能与包名相同。TaskAffinity主要与singleTask或者allowTaskReparenting属性配对使用。任务栈分为前台任务栈和后台任务栈。

当TaskAffinity与singleTask同时使用时,activity会启动在与TaskAffinity相同名字的任务栈中。当TaskAffinity与allowTaskReparenting同时使用时,allowTaskReparenting的主要作用是activity的迁移,allowTaskReparenting被设置为true的话,当从应用A启动应用B的一个活动后,当B被启动时,该活动会被从A的任务栈中转移到B的任务栈中。我还没发现有什么用!!! 

(4)singleInstance:

单实例模式,这是一种加强的singleTask,它具有singleTask的所有属性,但它单独的处于一个任务栈中,所以不会创建的新的实例,除非这个任务栈被销毁。

指定启动模式:

(1)通过AndroidManifest.xml指定:

<activity
    android:name=".act.BuySuccessActivity"
    android:label="@string/title_act_buy_succ"
    android:launchMode="singleTop" />

通过lanuchMode指定。

(2)通过在Intent中设置标志位指定:

Intent intent =new Intent(this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

其中第二种的优先级大于第一种,同时存在以第二种为准,限定范围也有所不同,可根据需求选择。

书上列举了许多常用的标记位,这里也列出来方便大家查看:
FLAG_ACTIVITY_NEW_TASK
指定为singleTask模式启动。
FLAG_ACTIVITY_SINGLE_TOP
指定为singleTop模式启动。
FLAG_ACTIVITY_CLEAR_TOP
指定为singleTop默认具有该标志位,位于他栈上的所有activity都要出栈。
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
具有该标志的不会出现在activity历史activity的列表中,等同于android:excludeFromRecents="true"









android的Activity启动模式

  • 2016年03月16日 17:59
  • 516KB
  • 下载

Android面试题(一)——Activity的生命周期和启动模式

Android面试题(一)——Activity的生命周期和启动模式引言 这份面试题系列文章旨在查漏补缺,通过常见的面试题发现自己在Android基础知识上的遗漏和欠缺,验证所学是否扎实。 这是系列的第...

Android之Activity启动模式Demo

  • 2013年07月07日 08:32
  • 929KB
  • 下载

android Activity 四种启动模式例子

  • 2015年11月07日 14:25
  • 996KB
  • 下载

Android启动模式以及如何通过adb指令查看app当前运行的activity

Activity的启动模式是我们实际开发以及面试中经常会用到的知识点,对Activity的四种启动模式我们应该有一个比较清楚的理解。先声明,这里的阐述比较适合初学者,如果有更深入的理解,欢迎大家批评指...

android activity启动模式详解

  • 2017年10月21日 14:31
  • 1.24MB
  • 下载

# Android中Activity四种启动模式和taskAffinity属性详解 #(4)

## 四 实例验证singleInstance的行为 ## 根据上面的讲解,并且参考谷歌官方文档,singleInstance的特点可以归结为以下三条: 1. 以singleInstance模...
  • Blumamy
  • Blumamy
  • 2015年02月06日 11:28
  • 256
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 初学activity的启动模式
举报原因:
原因补充:

(最多只允许输入30个字)