一句话区别: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的,你说有关系嘛,当然了没关系就是有关系咯,有关系就是没关系咯,但是同时呢,这些启动模式也相当的重要哇,这篇文章只是适用于新盆友使用咯,当然老朋友也可以看看啊,提提意见啥的,大家一起进步,但愿能帮助一些猿古人类吧,哈哈!

更多相关文章

  1. 【读书笔记】Android(安卓)应用程序进程的启动过程
  2. #Android设计模式学习笔记(抽象工厂模式)
  3. Android系统启动流程简析
  4. Android启动Application onCreate走了多次
  5. 详解Android冷启动实现APP秒开的方法
  6. Android(安卓)activity启动关闭时滑动出现消失(并解决activity跳
  7. android开发教程(十一)——android应用程序基础
  8. Android(安卓)View的测量、布局、绘制过程详解(上)
  9. 2020.9.8 oppo Java开发(Android)一面面经

随机推荐

  1. Attention原理及TensorFlow AttentionWra
  2. Unity平台 | 快速集成华为AGC AppLinking
  3. 妈妈再也不用担心爬虫被封号了!手把手教你
  4. Python数据科学:神经网络
  5. 火箭五年四遇勇士,终究还是败了。
  6. python 接口自动化测试-----常见面试题汇
  7. 滑动宫格验证码都给碰上了?没事儿,看完此文
  8. Android(安卓)启动过程分析--笔记缩减
  9. 用Flask+Aiohttp+Redis维护动态代理池
  10. App抓包其实没那么复杂!Charles来帮你搞定