Android基础之Activity launchMode详解
本文来自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详解的更多相关文章
- Android组件系列----Activity组件详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- Android application 和 activity 标签详解
extends:http://blog.csdn.net/self_study/article/details/54020909 Application 标签 android:allowTaskRep ...
- Android之路-------Activity的详解
前言 由于接近放假,公司在赶项目所以前段LP比较忙,没什么时间总结和写博客,只是准备睡觉的时候看看书,每天看的不算多,大概10多页左右吧,不过每天坚持如此的话那也是一个庞大的数字. 今天LP的任务完成 ...
- Android Fragment与Activity通讯详解
与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例. Fragment可 ...
- Android 之窗口小部件详解(三) 部分转载
原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...
- Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!
Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...
- Activity知识点详解
Activity知识点详解 一.什么是Activity 官方解释: The Activity class is a crucial component of an Android app, and t ...
- Android图片缓存之Bitmap详解
前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...
- Android Design Support Library使用详解
Android Design Support Library使用详解 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的And ...
随机推荐
- 【转载】about slack
About Slack slack is the difference b/w the REQUIRED TIME and the ARRIVAL TIME. 1.WHAT IS SLACK WITH ...
- Android facebook-android-sdk-3.5.2 FQL
android平台下使用Facebook 3.5.2的SDK实践 步骤总结: 1.引用SDK 在Facebook官网下载最新版的SDK,解压. 打开Eclipse, 'File' -> 'Imp ...
- c++ _beginthread
c++多线程编程 #include <windows.h> #include <process.h> /* _beginthread, _endthread */ #inclu ...
- 团队项目——二手书店(NABC分析)
特色:可发布 N:登陆用户可自行发布售书信息,为学生提供一个网上交易旧书的平台. A:后台数据库管理,对于新登陆的用户信息加以整合,统一发布. B:想出手旧书的学生可从中获取不小的利益,而且也可以实现 ...
- iframe 传值问题
当一个页面中插入了iframe或者由不同的框架组成(fieldset)时,这种情况下,需要处理的业务逻辑比较常见的就是数据进行交互了 1.页面中插入了iframe情况 由于页面中插入了iframe,那 ...
- TCP 粘包/拆包问题
简介 TCP 是一个’流’协议,所谓流,就是没有界限的一串数据. 大家可以想想河里的流水,是连成一片的.期间并没有分界线, TCP 底层并不了解上层业务数据的具体含义 ,它会根据 TCP 缓冲区 ...
- 【BZOJ】【2765】【JLOI2010】铁人双项比赛
计算几何/半平面交 本来我是想去写POJ 1755的,然后想起了这道跟它很像的题,但应该是弱化版,所以就先写了这个…… 我们可以发现每个人的总用时,与k是呈一次函数关系的:$time_i=\frac{ ...
- [转载]115个Java面试题和答案
不知道大家有没有这样的体会,就是找工作的时候不得不准备大量面试题,而工作的时间长了面试题里的精髓却忘的差不多了... 转载几篇Java面试的bolg,温故而知新,最重要的是常来看看. 1. http: ...
- Leetcode#138 Copy List with Random Pointer
原题地址 非常巧妙的方法,不需要用map,只需要O(1)的额外存储空间,分为3步: 1. 先复制链表,但是这个复制比较特殊,每个新复制的节点添加在原节点的后面,相当于"加塞"2. ...
- rivers ioi2005 树形dp
说句实话,写完这道题,很想吐一口血出来,以示我心情的糟糕: 题目很简单,树形dp,正常做30分钟,硬是做了好几个小时,真是伤心. 题解不写了,只是吐个槽,网上没有用背包写的dp,全是左儿子右兄弟写法, ...