[Android]Android Activity 启动模式详解
一句话区别:standard,需要即new对象,不管对象是否存在,single模式可以复用对象。运行模式与线程和 进程均没有什么关系,与使用场景有关系。
最近有群里的朋友问我 Activity的四种启动模式分别是什么意思? 当初因为项目比较忙,草草的解释了下, Api文档中说的也只是一般,在这里就小记一下吧,以便有更多的朋友对Activity启动模式了解深刻一点。度娘的时候 就可以找得到不需要在 问人了。如果不了解的话,简单的几句也说不清晰。
Activity 四种启动模式,分别为:standard 、singleTop、singleTask、singleInstance。
一 :
standard 模式:这个就没有什么好说的了,Android默认Activity启动的模式 就是 standard,如果有3个 Activity,Act1,Act2,Act3, 如果从Act1 启动到Act2 ,在启动到Act3,那么Android 的任务栈(task stack)分别为 Act1、Act2、Act3,Act3 在栈顶,如果此时按手机返回键,则需要返回3次才能返回到桌面(假设是从桌面启动的demo),任务栈分销毁掉 Act3,Act2,最后Act1 。
二 :
singleTop模式:
实验效果:
singleTop模式:该启动模式和standard模式相差不多,任务栈分配也很相似,如:现有 act1,act 2,在act2 清单文件中配置 android:launchMode="singleTop" ,其他都是默认standard 模式, 若从桌面启动该实验demo,从act 1,到act2 ,那么任务栈则分配为,act1,act2,此时该任务栈和 standard 模式任务栈分配则完全相同,接下来则说明不同的地方,如果在act2 界面中 启动 到act1, 此时的 任务栈 情况则为 act1,act2,act1,在由act1 启动到act2,在启动到act2,进行多次启动,(在act2界面)任务栈的情况则为,act1,act2,act1,act2,栈顶的act2 则不会重新创建,则会复用act2 该 Activit, 依次类推。
理论知识:
singleTop,如果任务栈的栈顶元素是要被激活的组件,不会创建新的Activity放在任务栈,而是会复用栈顶的Activity。 如果发现栈顶的元素不是要激活的Activity,就会创建新的Activity 放置到任务栈里面
singleTop模式应用场景 :
App程序中(或浏览器中)保存的书签,假如用户看到一个界面保存自己喜欢的标签,假如要保存10个,这个时候用户在返回键的时候,则会返回10次才能返回到App应用中, Android下singleTop 则解决该问题。
三
singleTask 模式 :
实验效果 相差不大,实验内容就不多说了,自己可以写个小demo,两个Activity,每个Activiy 有两个button,可以相互启动 打日志去动手查看,会理解更加深刻,可以参照着 SingleTop模式去实验,以下只是讲解下 和SingleTop的区别:
区别如下:(理论知识)
SingleTask 操作模式,一般和singleTop操作模式类似,如果他发现任务栈里面已经有了要启动的这个Activity,他会清空这个Activity所在的任务栈上面的所有Activiy,然后直接复用这个已经存在的Activity 。
应用场景:
如果一个App中,有一个功能需要加载网页内容 ,打开一个 browserActiviy现在网页内容,则内存开销非常大,首先要初始化webkit /c++ 嵌入式浏览器内核broweractivity 配置了singleTask,空间换时间,使用该模式可以节省内存开销。
四 :
singleinstance 模式 :
直接理论知识吧”:
singleInstance操作模式会新开启一个任务栈,跟其他普通Activity不是 同一个任务栈,比较牛,他的模式流程是 首先要新开启一个新的任务栈把要激活的Activity放置到新的 任务栈里,这个任务栈里面只有且 只有一个实例,也比较极端吧。说比较极端也跟他的应用场景有关系。
应用场景 :
App各种词典,向有道词典,什么金山词典,说极端是因为不想被放置到同一个任务栈里面,它是全局的系统程序应用,达到节省内存的使用目的。
说这些到底有神马用呢,因为啊,大部分公司面试的时候 都好问这一口,问什么鸟问题呢,大致是要问你,Android的启动模式跟进程 有没有关系,你说有什么关系嘞,鸟毛的关系都木有,进程是进程, 任务栈是管理Activity的,你说有关系嘛,当然了没关系就是有关系咯,有关系就是没关系咯,但是同时呢,这些启动模式也相当的重要哇,这篇文章只是适用于新盆友使用咯,当然老朋友也可以看看啊,提提意见啥的,大家一起进步,但愿能帮助一些猿古人类吧,哈哈!
❤️【Android精进之路-05】怎么创建Activity,如何启动另一个Activity,干货满满,建议收藏❤️ 上一篇文章❤️【Android精进之路-04】Android核心组件Activity,必须掌握的知识点(Activity是什么,生命周期是怎样的)❤️ 介绍了Activity的基本概念以及生命周期,但是没有说到如何创建Activity,Activity之间如何传值。SO,本文将重点讲解Activity的创建以及如何Activity之间如何传递参数。
Android快速查看某个Activity的信息 Android中,如果能快速获取某个Activity的名称,我们就不用必须顺着代码逻辑,一步一步的去查找我们想查找的页面了,这就能极大的提高开发速度。
相关文章
- 加密狗android,Android系统加密狗的设计与实现
- android+制作开机动画,Android 开机动画制作详解
- android 浏览器 开发,Android 浏览器的开发实例分享
- android 常用加密,分享一下Android各种类型的加密
- android 空间分享到朋友圈,Android开发之微信分享到好友,朋友圈
- android onresume方法,Android onActivityResult()和onResume()的执行顺序
- android sdk根目录,Android SDK位置
- android sdk安装过程,图文详解Android 3.0 SDK安装教程
- android-短信验证功能,Android实现获取短信验证码的功能以及自定义GUI短信验证详解…
- android系统中toast是什么_Android个人资料简单布局
- android attrs获取_关于Android attrs 自定义属性的说明
- android scaleanimation动画,Android 动画之ScaleAnimation应用详解「建议收藏」
- Multiple dex files define Lcom/ta/utdid2/android/utils/AESUtils
- Android OpenGL ES 基础原理
- 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )
- 【Android 逆向】Android 权限 ( adb 降权相关的属性 | ro.secure 属性 | ro.debuggable 属性 | service.adb.root 属性 )
- 【Android UI】Canvas 画布 ① ( Canvas 状态栈 | Canvas 状态栈入栈与出栈 | 获取 Canvas 状态栈容量 | Canvas 状态栈原点数据 )
- Android Activity的launchMode四种启动模式备忘详解手机开发
- Android 播放音频详解手机开发
- Android开发艺术探索(一)——Activity的生命周期和启动模式详解手机开发
- 怎么实现服务器给android客户端主动推送消息详解手机开发
- 使用Android实现连接MySQL数据库:实现快速数据交互与管理(android连接mysql数据库)
- Android源码学习之观察者模式应用及优点介绍
- android版本检测Android程序的版本检测与更新实现介绍
- Android源码学习之工厂方法模式应用及优势介绍