对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

Activity的launchMode和任务栈小结的更多相关文章

  1. Android Activity 启动模式和任务栈

    在了解了基本的Activity的生命周期后,我们能够很好的在一个Activity上面做相关的业务.但是这是不够的,因为Android通过任务栈来保存整个APP的Activity,合理的调度任务栈才能够 ...

  2. activity的启动模式和栈管理

     在学习Android的过程中,Intent是我们最常用Android用于进程内或进程间通信的机制,其底层的通信是以Binder机制实现的,在物理层则是通过共享内存的方式实现的.     Intent ...

  3. android开发艺术探索学习 之 结合Activity的生命周期了解Activity的LaunchMode

    转载请标明出处: http://blog.csdn.net/lxk_1993/article/details/50749728 本文出自:[lxk_1993的博客]: 首先还是先介绍下Activity ...

  4. Activity之launchMode理解

    对于Activity中的四个lauchMode[standard(默认).singleTop.singleTask.singleInstance]的介绍网上已经有大把的文章了,但是在实际应用开发时,对 ...

  5. Activity的LaunchMode情景思考

    此链接:http://blog.csdn.net/xiaodongrush/article/details/28597855 1. 有哪几种类型?分别有什么用? http://developer.an ...

  6. Activity的LaunchMode应用场景思考

    本文链接:http://blog.csdn.net/xiaodongrush/article/details/28597855   1. 有哪几种类型?分别有什么用? http://developer ...

  7. Activity启动清空原任务栈

    就是 启动新的activity  但是把之前所有的activity 都finish掉 而且所有的activity 都是在一个栈中 Intent intent = new Intent();intent ...

  8. LeetCode Monotone Stack Summary 单调栈小结

    话说博主在写Max Chunks To Make Sorted II这篇帖子的解法四时,写到使用单调栈Monotone Stack的解法时,突然脑中触电一般,想起了之前曾经在此贴LeetCode Al ...

  9. 细说Activity与Task(任务栈)

    Task概要: task是一个具有栈结构的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个task,来放置根Activity:默认情况下, 一个Activity启动另一个Ac ...

随机推荐

  1. POJ-1743 Musical Theme 字符串问题 不重叠最长重复子串

    题目链接:https://cn.vjudge.net/problem/POJ-1743 题意 给一串整数,问最长不可重叠最长重复子串有多长 注意这里匹配的意思是匹配串的所有元素可以减去或者加上某个值 ...

  2. word中输入公式方案

    如何开启word公式模式:“Alt”+"=" 1. 如何输入矩阵: 使用&链接行元素,@进行换行,空格键进行转换 如输出: 先开启公式模式:“Alt”+"=&qu ...

  3. Linux bash常用快捷键

    移动光标 ctrl-a 光标移动到行首 ctrl-e 光标移动到行尾 ctrl+xx 在行首和光标位置直接切换 ctrl-b 光标左移一位 ctrl-f 光标右移一位 alt-b 光标左移一词 alt ...

  4. Adobe AIR and Flex - 保存序列化对象文件(译)

    创建任何桌面应用程序几乎总是需要在本地存储数据,通过Adobe AIR我们有几下面几个选择,一个是我们能够使用内置的 SQLite 数据库支持,对于少量的数据这是大材小用了.另外一个选择是我们通过把数 ...

  5. Java基础学习总结(46)——JAVA注解快速入门

    各位开发童鞋,注解这个东西我们肯定每天都能看见,也许有时候看的太多了到是会忽略注解这东西具体是如何工作的.今天在这里用最短的篇幅快速讲解下注解的原理,对这块记的不太清楚的同学也可以再次看看,下次有人详 ...

  6. ZOJ 3365 Integer Numbers

    Integer Numbers Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on ZJU. Origina ...

  7. Material Design学习之 Button(具体分析,传说中的水滴动画)

    转载请注明出处:王亟亟的大牛之路 上一篇大致介绍了Material Design的一些基本概念传送门:http://blog.csdn.net/ddwhan0123/article/details/5 ...

  8. 图像切割—基于图的图像切割(Graph-Based Image Segmentation)

     图像切割-基于图的图像切割(Graph-Based Image Segmentation) Reference: Efficient Graph-Based Image Segmentation ...

  9. UVA 11020 - Efficient Solutions(set)

    UVA 11020 - Efficient Solutions 题目链接 题意:每个人有两个属性值(x, y).对于每个人(x,y)而言,当有还有一个人(x', y'),假设他们的属性值满足x' &l ...

  10. 【金阳光測试】基于控件核心技术探讨---Android自己主动化系列(2)---2013年5月

    第一讲分享了下安卓自己主动化一些概况和一些自己主动化框架现状和技术可以解决什么样的问题. 这次课就深入到android世界里面.遨游.翱翔.深入了解自己主动化測试核心技术. 搞过编程开发的同学听到in ...