Android Activity 启动模式详解

转载 2015年07月10日 09:34:05

       最近有群里的朋友问我 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活动详解

Activity是所有程序的根本,所有程序的流程都运行在Activity 之中,Activity是由Android系统进行维护的,它的一个产生、运行、销毁即为一个生命周期,这里分别从以下4个方面记录学...
  • netdxy
  • netdxy
  • 2016年02月21日 19:01
  • 1806

Activity——简介和使用

Android为我们提供了四种应组件,分别为Activity、Service、Broadcast receivers和Content providers,这些组建也就是我们开发一个Android应用程...
  • zy1235678
  • zy1235678
  • 2014年03月08日 19:19
  • 4498

Activity四种启动模式详解

最近在学习《Android开发艺术探索》,所以对所学习到的知识做个总结,就算是做笔记吧。 Activity的启动模式目前有四种,分别是standard、singleTop、singleTask和si...
  • Mr_wzc
  • Mr_wzc
  • 2016年06月23日 20:16
  • 2608

Android之Activity生命周期浅析(一)

Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的。今天我们就来详细地聊聊Act...
  • javazejian
  • javazejian
  • 2016年07月17日 15:31
  • 25570

Android中Activity四种启动模式和taskAffinity属性详解

在android应用开发中,打造良好的用户体验是非常重要的。而在用户体验中,界面的引导和跳转是值得深入研究的重要内容。在开发中,与界面跳转联系比较紧密的概念是Task(任务)和Back Stack(回...
  • ljz2009y
  • ljz2009y
  • 2014年05月22日 21:02
  • 6974

深入理解Activity——Token之旅

Token是ActivityRecord的内部静态类,我们先来看下Token的继承关系,Token extends IApplicationToken.Stub,从IApplicationToken....
  • zjd934784273
  • zjd934784273
  • 2016年07月24日 14:43
  • 391

安卓四大控件之Activity详解

创建Activity 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 ...
  • qq_27280457
  • qq_27280457
  • 2016年07月06日 12:17
  • 1453

Activity 生命周期详细解释

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期, 切横屏时会执行一次,切竖屏时会执行两次 2、设置Activity的android:config...
  • qq_34927117
  • qq_34927117
  • 2016年09月01日 22:49
  • 686

Android中Activity四种启动模式和taskAffinity属性详解

在android应用开发中,打造良好的用户体验是非常重要的。而在用户体验中,界面的引导和跳转是值得深入研究的重要内容。在开发中,与界面跳转联系比较紧密的概念是Task(任务)和Back Stack(回...
  • brave2211
  • brave2211
  • 2013年09月06日 23:40
  • 48217

Activity实现OnclickListener接口的思想和具体用例(转载)

转载说明g 关于Activity中继承OnclickListener的说明     在为组件添加监听事件时,传统的方法是在组件后面加上.setOnclickListener(Vie...
  • tech_universe
  • tech_universe
  • 2014年10月29日 10:13
  • 2437
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Activity 启动模式详解
举报原因:
原因补充:

(最多只允许输入30个字)