Activity的launchMode和任务栈小结

标签: activity launchmode 任务 | 发表时间:2015-08-03 03:24 | 作者:Johnnyz1234
出处:http://blog.csdn.net

对Activity的launchMode的理解一直没有好好总结下,这两天系统总结下launchMode的用法:

Activity的launchMode属性决定了Activity和应用程序当前任务栈之间的关系。一个应用程序当前任务栈管理着应用程序的activity集合的Activity归属和Activity间的交互。开发人员想要开发的App拥有良好的交互,因此,深入对Activity的launchMode的理解能帮助我们开发性能良好和交互合理的App。

Activity的launchMode主要有四种类型:

  • standard
  • singleTop
  • singleTask
  • singleInstance

我们知道Activity的四种启动模式都是在配置文件manifest里配置,除此之外我们还可以通过制定Intent的flag参数来改变Activity的默认行为。也就是说,我们的Activity的默认四种类型的表现形式,在我们启动该Activity前,我们指定Intent的flag参数,我们可以覆盖Activity的默认表现。Intent的改变默认启动模式的常见参数有如下:

  • FLAG_ACTIVITY_NEW_TASK
  • FLAG_ACTIVITY_CLEAR_TOP
  • FLAG_ACTIVITY_SINGLE_TOP

下面从Activity的launchMode表现的四种启动方式说起:
1.standard
standard模式是默认的启动模式,不用为Activity配置android:launchMode属性即可,也可以显示指定为standard。启动standard模式的Activity时候,会在任务栈的栈顶添加一个新的实例化的Activity。点击返回键,Activity的退栈顺序就按照任务栈先进先出的结构退栈。

2.singleTop
启动singleTop模式的Activity时候,系统会查找当前任务栈栈顶元素是不是当前要启动的Activity实例的类,如果不是,会实例化一个新的类添加到栈顶;如果是,当前栈顶Activity会被复用。点击返回键,Activity的退栈顺序就按照任务栈先进先出的结构退栈。

3.singleTop
启动singleTask模式的Activity时候,Activity会默认开启一个新的任务栈,该Activity作为根元素。如果该Activity的实例已经存在单独的任务栈,系统会调用该Activity的onNewIntent()方法,保证该Activity只会存在一个实例。关于singleTask的元素退栈分两种情况:
- 启动的Activity属于本应用程序Activity集合
首先定义Activity启动规则如下图所示。当启动顺序为A->C->A->C,返回栈退栈操作为C->A->home界面,通过实际的例子可以说明,当一个任务栈里存在singleTask类型的实例,再启动该singleTask类型的Activity时候,在任务栈里该Activity实例上面的Activity都会清出任务栈,该Activity变成任务栈顶元素。
这里写图片描述

- 启动的Activity不属于本应用程序应用程序集合
当启动的singleTask为另外的应用程序的Activity,如果当前后台没有任务栈存在该Activity的情况,就新建一个任务栈,该Activity为该任务栈的栈顶元素。一种特殊的情况,当后台刚好有一个任务栈存在改Activity的时候,此处该任务栈会被调到前台。如果此时按返回键的时候,回退的过程会是如下:
这里写图片描述

4.singleInstance
启动singleInstance与singleTask相似,只是系统不会向声明为singleInstance的任务栈添加其他的activity,通过该声明为singleInstance的Activity实例启动其他的Activity,其他Activity必须添加到其他的任务栈,也就是说声明额外singleInstance的Activity所在任务栈只有它一个元素。

下面说下关于Intent的常用flags系统常量:
FLAG_ACTIVITY_NEW_TASK
该常量的实际效果跟上面提到的singleTask的启动的Activity不属于本应用程序的Activity集合效果一样。
FLAG_ACTIVITY_SINGLE_TOP
该常量实际效果跟singleTop效果一样。
FLAG_ACTIVITY_CLEAR_TOP
该常量相当于上面提到的singleTask的启动的Activity属于本应用程序的Activity集合效果一样。

本文个人周末动手实践小结,可能会有理解偏差错误的地方,欢迎大家指正,一起共同进步。

转载请注明出处: http://blog.csdn.net/johnnyz1234/article/details/47209957

作者:Johnnyz1234 发表于2015/8/2 19:24:31 原文链接
阅读:78 评论:0 查看评论

相关 [activity launchmode 任务] 推荐:

Activity的launchMode和任务栈小结

- - CSDN博客推荐文章
对Activity的launchMode的理解一直没有好好总结下,这两天系统总结下launchMode的用法:. Activity的launchMode属性决定了Activity和应用程序当前任务栈之间的关系. 一个应用程序当前任务栈管理着应用程序的activity集合的Activity归属和Activity间的交互.

Android Activity与Service通信

- - CSDN博客移动开发推荐文章
一、当Acitivity和Service处于同一个Application和进程时,通过继承Binder类来实现.      当一个Activity绑定到一个Service上时,它负责维护Service实例的引用,允许你对正在运行的Service进行一些方法调用. 比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信.

使用intent来启动activity

- - CSDN博客推荐文章
Intent最常见的用途是绑定应用程序组件,并在应用程序之间通信.Intent用来启动Activity,允许创建不同屏幕的一个工作流. 要创建并显示一个Activity,可以调用startActivity,并传递给它一个Intent,如:. 可以构造Intent来显示地指定要打开的Activity类,或者包含一个目标Activity必须执行的动作.

从网页启动Activity

- - 移动开发 - ITeye博客
正好Android SDK 给我们提供了解决方案,在网页中点击某个链接时,会匹配到Activity所配置的隐式Intent(配置在Manifest文件中). 第一步:在Manifest文件中给TestActivity配置一个隐式Intent. 第二步:这时,当在网页中点击链接Start TestActivity就会启动TestActivity了.

Activity生命周期详解

- - 编程语言 - ITeye博客
本文概述:针对一个例子详细阐述Activity的生命周期. Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的Activity的集合,这个栈也叫返回栈(Back Stack). 每次我们启动一个新的Activity,这个Activity就会入栈,并处于栈顶位置. 按下返回键或者finish()方法销毁一个Activity时,处于栈顶的Activity就会出栈,另一个Activity就会处于栈顶位置,显示给用户的就会是这个Activity..

activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver解释

- - CSDN博客推荐文章
Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期(由系统控制生命周期,程序无法改变,但可以用onSaveInstanceState保存其状态). 对于Activity,关键是其生命周期的把握(如那张经典的生命周期图=.=),其次就是状态的保存和恢复(onSaveInstanceState onRestoreInstanceState),以及Activity之间的跳转和数据传输(intent).

在Activity之间传递数据

- - ITeye博客
在一个Activity中启动另一个Activy,取得数据,如:在应用 A 中启动 通讯录,选择目标用户,返回,以便在A 中使用选择的通讯录数据,基本过程如下:.         /* 开启Pictures画面Type设定为image */.         intent.setType("image/*");  //通讯录的不能这样写,.

Activity劫持与用户防范

- - ITeye博客
本文内容多参考于网上博文,但代码及用户防范的方法均属原创,转载请注明出处 http://msdxblog.sinaapp.com/?p=623. 1、Activity调试机制. 在android系统中,不同的程序之间的切换基本上是无缝的,它们之间的切换只不过是Activity的切换. Activity的概念相当于一个与用户交互的界面.

Android 实现Activity后台运行

- - CSDN博客移动开发推荐文章
此方法其实不是主要是屏蔽Keycode_Back,让它不结束(finish())Activity,直接显示HOME界面.                                 ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).

Android 之 Activity的加载模式

- - 移动开发 - ITeye博客
         加载模式决定以哪种方式启动一个跳转到原来某个Activity实例;.         在Android 开发中,activity 之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个activity实例,而不是生成大量的重复的activity;. 3)  加载模式的种类:.