关闭

Android中Activity启动模式详解

244人阅读 评论(0) 收藏 举报
Activity启动模式设置:

        <activity android:name=".MainActivity" android:launchMode="standard" />

Activity的四种启动模式:

    1. standard

        模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。

    2. singleTop

        如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。

    3. singleTask

        如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 

    4. singleInstance

        在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。
复制代码

 

  其中standard是系统默认的启动模式。

 

  下面通过实例来演示standard的运行机制:

复制代码
 1 private TextView text_show;
 2     private Button btn_mode;
 3     
 4     @Override
 5     public void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.activity_main);
 8         
 9         text_show = (TextView) this.findViewById(R.id.text_show);
10         
11         text_show.setText(this.toString());
12         
13         btn_mode = (Button) this.findViewById(R.id.btn_mode);
14         
15     }
16     
    //按钮单击事件 17 public void LaunchStandard(View v){ 18 startActivity(new Intent(this,MainActivity.class)); 19 20 text_show.setText(this.toString()); 21 }
复制代码

  初始化界面如下:

  

  当点击按钮时,会创建新的Activity,通过TextView@后16进制数的显示即可看出,点击两次分别界面如下:

  

   

  

  此时,我们分析栈内部的运行机制:

   (依次从栈顶向上)

 

  因此,这种Standard模式是每次都会创建新的Activity对象,当点击返回按钮时,他会将栈顶(当前Activity)消灭,然后跳到下一层,例如如果现在Activity是44ed8c50,那么当我们点击返回时Activity会变为44f28a48,不过此时在这个Activity中再次点击按钮创建对象时,它会另外创建新的Activity对象,这种模式可能大多数情况下不是我们需要的,因为对系统性能的消耗过大。

  下面我们介绍两种能使用当前栈中Activity的启动模式:

  2. singleTop

    从上面的解释中即可知道,在每次使用新的Activity时会自动检测栈顶的当前Activity是否是需要引用的Activity,如果是则直接引用此Activity,而不会创建新的Activity。

    我们在刚才的界面中加入一个"启动singletop模式"按钮,当点击时出现我们创建的singletop中,在Activity singletop中有一个按钮,启动singletop模式,表示启动当前Activity,由于我们在清单文件中配置Activity的启动模式为singleTop,因此此时不会再创建而是利用当前栈顶的singleTop Activity:

     <activity
            android:name=".SingleTopActivity"
            android:label="@string/singletop"
            android:launchMode="singleTop" >
        </activity>

 

 

    界面初始化:

      

    点击"启动singleTop模式"按钮:

          

  我们分析它的运行机制,可知,当程序运行到此时,栈中的数据形式为:

    

    当我们在上面界面中点击"启动singleTop模式"按钮时,由于此Activity设置的启动模式为singleTop,因此它首先会检测当前栈顶是否为我们要请求的Activity对象,经验证成立,因此它不会创建新的Activity,而是引用当前栈顶的Activity。

       

    虽然它不会创建新的Activity对象,不过它每次回调用onNewIntent()方法:

复制代码
1 @Override
2     protected void onNewIntent(Intent intent) {
3         // TODO Auto-generated method stub
4         super.onNewIntent(intent);
5         
6         Toast.makeText(this, new Date().toString(), 1).show();
7     }
复制代码

 

    我们为此方法编写代码输出当前日期,则在每次点击上面按钮时会输出当前日期。

 

  3.singleTask

    此启动模式和singleTop在名字上即可看出区别,即singleTop每次只检测当前栈顶的Activity是否是我们需要请求创建的,而singleTask则会检测栈中全部的Activity对象,从上向下,如果检测到是我们所请求的则会消灭此Activity对象上面的对象,直接把检测到的我们需要的Activity置为栈顶。

    我们创建一个SingleTaskActivity,此界面中包含一个启动MainActivity和启动SingleTaskActivity按钮。

  初始化:

    

  点击"启动singleTask模式"按钮:

    

  在此界面中点击第二个按钮"启动singleTask模式"按钮,根据定义会检测当前栈中是否有此Activity对象,因此显示的还是当前的Activity,不会重新创建;

  再点击"启动Standard模式"按钮,由于MainActivity的启动模式为standard,所以在此会重新创建一个MainActivity对象:

    

  此时栈中数据格式为:

    

  当在上面界面中点击"启动singleTask模式"按钮时,由于检测到当期栈中第二个为我们要创建的Activity,会将最上面的MainActivity消灭,然后将SingleTaskActivity设置为栈顶:

    

 

  4.SingleInstance

    此启动模式和我们使用的浏览器工作原理类似,我们都知道在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。

 

    

    上面即为Android中的四种启动模式,我们在开发Android项目时会经常使用到,巧妙设置Activity的启动模式会节省系统开销和程序运行效率。

来源:http://www.cnblogs.com/fanchangfa/archive/2012/08/25/2657012.html

0
0
查看评论

Android基础:最易懂的Activity启动模式详解

前言 Android基础中的Activity启动模式非常重要 本文将介绍对Activity启动模式进行全面介绍 目录1. 定义即Activity启动的方式2. 启动模式的类别Android启动提供了四种启动方式: 标准模式(standard) 栈顶复用模式(singleTop) 栈内复用模式(sin...
  • carson_ho
  • carson_ho
  • 2017-01-22 16:59
  • 3689

Activity四种启动模式详解

最近在学习《Android开发艺术探索》,所以对所学习到的知识做个总结,就算是做笔记吧。 Activity的启动模式目前有四种,分别是standard、singleTop、singleTask和singleInstance。怎么给Activity的启动模式呢? 一般我们通过AndroidMeni...
  • Mr_wzc
  • Mr_wzc
  • 2016-06-23 20:16
  • 2670

[Android开发]Activity的四种启动模式及其应用场景

启动模式(launchMode)在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里。这里简单介绍一下task的概念,task是一个具有栈结构的对象,一个task可以管理...
  • CodeEmperor
  • CodeEmperor
  • 2016-01-08 11:39
  • 15135

关于代码实现activity的启动模式

在开发项目中我们可能会经常遇到,
  • u010897392
  • u010897392
  • 2014-08-07 09:31
  • 1629

彻底弄懂Activity四大启动模式

最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解。我觉得对某个知识点的理解必须要动手操作才能印象深刻,所以今天写一篇博文,结合案例理解Activity启动模式。由于之前看过“区长”的一篇博文(文章结尾处有链接)深受启发,因此本文是在那篇文章的基础上更加全面的讲解。   ...
  • mynameishuangshuai
  • mynameishuangshuai
  • 2016-05-24 16:04
  • 58711

Android Activity 的四种启动模式

在实际开发中,应根据特定的需求为每个Activity制定恰当的启动模式。Activityde 的启动模式有四种。分别是standard、singleTop、singleTask和singleInstance。在AndroidManifest.xml中,通过标签的android:launchMode属...
  • YeeCeeYee
  • YeeCeeYee
  • 2017-03-22 21:47
  • 297

android:Activity启动模式之singleInstance

先看一下singleInstance启动模式的说明: 只有一个实例,并且这个实例独立运行在一个activity任务栈中,这个task只有这个实例,不允许有别的Activity存在下面我们通过一个实例来了解singleInstance启动模式 在手机上的运行结果如下图 layout布局文件为...
  • su20145104009
  • su20145104009
  • 2016-02-14 14:22
  • 3581

Activity的四种启动模式的介绍及其应用场景

应用场景: 1.singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。聊天的对话窗口, 2.singleTask适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,...
  • JustinNick
  • JustinNick
  • 2016-09-13 22:30
  • 2522

Android Activity启动模式的设置

Android为了使我们能够打破默认的堆栈的先后出的模式,提供了两个种方式:一种是在AndroidManifest.xml定义Activity时指定它的加载模式,另一种是在用Intent开启一个Activity时,在Intent中加入标志。如果两种方式都用了,则后者的优先级更高。  &#...
  • u011361576
  • u011361576
  • 2013-11-02 11:22
  • 2974

对于Android的Activity启动模式的一些总结和理解

安卓Activity的启动模式 1.1   两种启动方式 1.      在AndroidMainfest.xml中启动 例如: AndroidMainfest.xml.xml中设置Activity的launc...
  • u010335298
  • u010335298
  • 2016-10-13 14:55
  • 1357
    个人资料
    • 访问:3965次
    • 积分:80
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:12篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档