本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!

Activity的lauchmode,是基础的属性,但也是App优化必须掌握的知识,它约束了Activity生命周期中各个方法的使用。做了许多个项目,对此有一点小小的总结,希望对大家能有些许帮助。

先讲一个概念性问题,AndroidManifest.xml中对Activity启动模式的定义android:launchMode="",有四个值可选,分别是:standard,singleTask,singleTop,singleInstance。它们主要用来定义Activity在堆栈中的存在方式。

一般一个应用打开的所有Activity都在一个栈里,位于栈底的Activity最后退出;打开了其它应用,那么就需要另开一个task,因为打开的Activity属于其它应用;每个应用都在自己的task里运行,也即是说每个task就是一个应用程序。

通常我们可以用一个Activity使用startActivity来启动另一个Activity,这个Activity可以是本应用的,也可以是其它应用,但不同的启动方式会给用户带来不同的体验,所以理解其中的意思会在完成任务时,做出更好体验度的应用来。

系统通过栈来管理Activity,栈是个先进后出的概念,通过back键来弹出Activity实例,位于栈底的Activity最后被弹出,一般要设为singleTask。

然后我们来一个个讲解各个值的意思,Acivity启动默认为standard,即可以不设,这样的Activity每次startActivity都会新建一个实例对象(Activity的实例,存在Activity的管理栈里),像标记为standard的Activity可以在栈里存在若干个,跟其他在一个task里工作,不新启动task。

singleTop指启动的Activity在栈顶则不新建,传递数据通过onNewIntent()。通常设为singleTop的Activity,保证它在最顶部,跟其他在同一个task里工作,不新启动task。

singleTask指该Activity如果存在,则不新建,直接使用,此时一般要实现onNewIntent()来接收数据传递;否则新建一个task,把此Activity装进去,被标记为singleTask的Activity会存放在同一个task中。

重新打开执行:onNewIntent->onRestart->onStart->onResume->onPostResume

singleInstance跟singleTask差不多,不过标记的Activity单独存在一个task里;有几个这样的Activity,则栈里会有几个这样的task来装它们,被标记为singleInstance的Activity不会放在同一个task中。

重新打开执行:onNewIntent->onRestart->onStart->onResume->onPostResume

另一点不同在于标记为singleTask的Activity被自启动后,有刷新界面的感觉,但被标记为singleInstance的则不会,所以需要刷新自身数据,自启动的同学就要注意了!

另外,当按下Home键时,如果你的当前页面不是主Activity,但再次进入的时候进入主Activity,这是为什么呢?

因为设置launchmode=singleTask|singleInstance的原因。我们知道这两个启动模式都是新启一个task,装载当前的activity,

所以,按下Home键再次启动时,当前栈里只有一个主activity,所以启动的还是它执行onRestart->onStart->onResume,而且按下Home前最后打开的页面会执行onDestroy方法。

现象2:如果主Activity启动方式是singleInstance,那么按下Home键,它始终会被关闭;
设为singleTask则不会。

总而言之,launchmode的设置是一种Activity栈管理的方式,如对象设置引用类型是一种内在管理方式一样。

Android基础之Activity launchMode详解的更多相关文章

  1. Android组件系列----Activity组件详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  2. Android application 和 activity 标签详解

    extends:http://blog.csdn.net/self_study/article/details/54020909 Application 标签 android:allowTaskRep ...

  3. Android之路-------Activity的详解

    前言 由于接近放假,公司在赶项目所以前段LP比较忙,没什么时间总结和写博客,只是准备睡觉的时候看看书,每天看的不算多,大概10多页左右吧,不过每天坚持如此的话那也是一个庞大的数字. 今天LP的任务完成 ...

  4. Android Fragment与Activity通讯详解

    与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例. Fragment可 ...

  5. Android 之窗口小部件详解(三)  部分转载

    原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...

  6. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

  7. Activity知识点详解

    Activity知识点详解 一.什么是Activity 官方解释: The Activity class is a crucial component of an Android app, and t ...

  8. Android图片缓存之Bitmap详解

    前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...

  9. Android Design Support Library使用详解

    Android Design Support Library使用详解 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的And ...

随机推荐

  1. php对象

    在php中,必须使用class关键字明确的声明对象,然后在对象类中定义数据类型和方法. 示例: class Color{ public $value; public static $RED = &qu ...

  2. 怎样把php数组转换成字符串,php implode()

    实例代码 一维数组转换成字符串代码! <?php $arr1=array("shu","zhu","1"); $c=implode(& ...

  3. CentOS安装Nexus(Maven私有库)详细配置及上传本地jar到私服

    Nexus原理 Maven的原理就是将jar从远程中央仓库下载到PC磁盘的本地仓库,当本地仓库没有发现需要的jar就会去Maven默认的远程中央仓库Maven Central(由Apache维护)中寻 ...

  4. Node.js 项目搭建

    关于 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识.本书绝不是一本“Hello World”的教程. 状态 你正在阅读的已经是本书的最终版. ...

  5. MySQL 主从数据库设置

    1.复制的介绍 MySQL 支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引 以跟踪日志循环.这些日志可 ...

  6. 提取html中的src 路径

    /// <summary> /// 替换body中的img src属性 附加上域名 /// </summary> /// <param name="str&qu ...

  7. 浅谈自我对git的初步认识

    本学期我们新增了一门课程,那就是软件工程,不知道为什么,感觉有种莫名的高大上.哈哈!难道是这个名称太抽象了吗?这个问题我感觉到后来肯定就明白了. 第一次博客,感觉好紧张哦,嘿嘿!老师让我们谈谈对git ...

  8. WKWebView 与 UIWebView

    apple和google为webkit该浏览器引擎的发扬光大做出了重要贡献,在WWDC 2014发布会上发布iOS 8中,apple公布了WebKit框架,这意味着OSX和IOS开发者将共用同样的开发 ...

  9. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) D Bear and Two Paths

    题目链接: http://codeforces.com/contest/673/problem/D 题意: 给四个不同点a,b,c,d,求是否能构造出两条哈密顿通路,一条a到b,一条c到d. 题解: ...

  10. File "/struts-tags" not found

    前言 由于在某个jsp引用了struts标签库,导致该错误产生--这是stuts项目算是一道经典错误,往往最后的解决方式是更换Tomcat.今天我记录的是引起这一错误的一个非常隐藏的原因. 错误描述 ...