Activity的启动模式

原创 2015年11月21日 10:58:56

Activity的启动模式有四种,

分别是 standard、singleTop、 singleTask singleInstance。

一  课前须知

(1)Android是使用返回栈来管理活动的

(2)平时我们使用的启动模式一般都是系统默认值standard。

(3)启动模式的选择可以在AndroidManifest.xml 中配置,给<activity>标签指定 android:launchMode属性值即可,如图所示:


二  启动模式,看图即知




三  实例测试分析这四种启动模式

   需求实例:

(1)共有三个Activity,分别是MainActivity,SecondActivity和ThirdActivity

(3)这三个Activity都有一个Button(btnSkip)

(3)点击btnSkip依次跳转到下一个Activity

(4)按Back依次返回,直到应用程序完全退出。

四   standard启动模式:

(4.1 ) 代码

这里附上MainActivity的Java代码,其他两个差不多,唯一不同是Intent指定的目标跳转活动参数不一。

打印log,查看跳转的Activity实例

package com.example.acticitydemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button btnSkip;
	
	public static final String TAG = "nate";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG,this.toString());
        btnSkip = (Button)this.findViewById(R.id.btnSkip);
        btnSkip.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(MainActivity.this,SecondActivity.class);
				startActivity(intent);
			}
		});
    }
}

(4.2)  查看log信息


(4.3)  三个Activity入栈过程如下图



(4.4)   销毁实例

按三下Back返回键,三个Activity依次出栈,且销毁实例。出栈顺序ThirdActivity--->SecondActivity---->MainActivity

4.5  疑问

这是最常见的启动模式,依次启动了三个不相同的Activity。但是如果把启动的目标Activity指定为同一个Activity实例呢?

试一下不就知道了,我们把MainActivity的Intent改一下 ,Intent intent = new Intent(MainActivity.this,MainActivity.class);

然后同样的我们点击三下btnSkip按钮,来启动Activity

查看log


可以看出,在standard启动模式下,启动三次MainActivity,系统会创建三个不同实例的MainActivity

查看入栈过程


这时 要想退出应用程序,需要按三次Back返回键。

结论:对于使用 standard 模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建 该活动的一个新的实例。

五  singleTop模式

如果返回栈的栈顶已是该活动,则不用创建新实例,直接使用即可

(5.1)改变需求:让MainActivity跳转到SecondActivity,然后让SecondActivity跳转到SecondActivity

(5.2)改变Activity的Intent

MainActivity :       Intent intent = new Intent(MainActivity.this,SecondActivity.class);
SecondActivity:   Intent intent = new Intent(SecondActivity.this,SecondActivity.class);

(5.3)配置启动模式

AndroidManifest.xml文件的<activity>标签配置android:launchMode="singleTop"

(5.4)运行程序,点击btnSkip两次,查看log发现


一共启动了三次Activity,却只创建了两个(MainActivity和SecondActivity),所以只需点击两次Back返回键即可退出应用程序

入栈过程图


六  singleTask 启动模式

每次启动该活动时系统首先 会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这 个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例

之前我们已经知道了singleTop模式,会发现,如果栈顶Activity与启动的Activity相同,则不需要再次创建该启动的Activity实例,但是如果启动的Activity与栈中(不确定是否是栈顶)的某一个Activity相同,那么系统会重新创建一个Activity实例吗?

答:singleTop模式下只有栈顶与启动的Activity相同才不会重新创建新的实例。而singleTask 模式下,不管是不是栈顶,只要栈中有相同的Activity,就不会重新创建新的实例

分析过程与五一致,这里不做过多解释

七 singleInstance模式

(7.1)问题猜想

想象以下场景,假设我们的程序中有一个 活动是允许其他程序调用的,如果我们想实现其他程序和我们的程序可以共享这个活动的实 例,应该如何实现呢?使用前面三种启动模式肯定是做不到的,因为每个应用程序都会有自 己的返回栈,同一个活动在不同的返回栈中入栈时必然是创建了新的实例。而使用 singleInstance模式就可以解决这个问题,在这种模式下会有一个单独的返回栈来管理这个活 动,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈,也就解决了共享活动实 例的问题。 

 (7.2)改变需求

这里我们用 四 standard启动模式的代码  ,然后稍作修改即可,具体改动如下:

(1)打印log的值我们改为 Log.i(TAG,"The Task ID is "+getTaskId());获取返回栈的ID

(2)改变SecondActivity的启动模式为singleInstance

(7.3)运行程序,查看log


可以发现  ,MainActivity和ThirdActivity在同一个返回栈中,而SecondActivity在另一个返回栈中

这时,我们按下Back返回键三次惊奇的发现,界面直接从ThirdActivity跳转到了MainActivity,然后又从MainActivity跳转到SecondActivity,最后从SecondActivity退出程序。仔细一想,确实如此,因为MainActivity和ThirdActivity在同一个返回栈中,而SecondActivity又在另一个返回栈中,所以会出现这样的情况

入栈过程如图







版权声明:本文为博主原创文章,未经博主允许不得转载。

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

启动模式(launchMode)在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用...
  • CodeEmperor
  • CodeEmperor
  • 2016年01月08日 11:39
  • 15132

Activity四种启动模式详解

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

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

前言 Android基础中的Activity启动模式非常重要 本文将介绍对Activity启动模式进行全面介绍 目录1. 定义即Activity启动的方式2. 启动模式的类别Android启动提供了四...
  • carson_ho
  • carson_ho
  • 2017年01月22日 16:59
  • 3689

彻底弄懂Activity四大启动模式

最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解。我觉得对某个知识点的理解必须要动手操作才能印象深刻,所以今天写一篇博文,结合案例理解Activity启动模式。由于之前看过“区长”的...
  • mynameishuangshuai
  • mynameishuangshuai
  • 2016年05月24日 16:04
  • 58698

Android Activity 的四种启动模式

在实际开发中,应根据特定的需求为每个Activity制定恰当的启动模式。Activityde 的启动模式有四种。分别是standard、singleTop、singleTask和singleInsta...
  • YeeCeeYee
  • YeeCeeYee
  • 2017年03月22日 21:47
  • 296

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

应用场景: 1.singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。聊天的对话窗口, 2.sing...
  • JustinNick
  • JustinNick
  • 2016年09月13日 22:30
  • 2521

Android四大组件---Activity之启动模式及启动模式的应用场景

在“Android性能优化”中有这么一条规则:    复用、回收Activity对象: 临时的activity及时finish, 主界面Activity启动模式设置singleTask,一般界...
  • u012810020
  • u012810020
  • 2016年01月11日 20:39
  • 1404

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

安卓Activity的启动模式 1.1   两种启动方式 1.      在AndroidMainfest.xml中启动 例如: AndroidMainfest.xml.xml中设置Activity的...
  • u010335298
  • u010335298
  • 2016年10月13日 14:55
  • 1357

Activity四种启动模式说明

1,standard标准模式: 每次启动一个Activity都会重新创建一个实例,即调用Activity创建时的生命周期方法onCreate,onStart,onResume;被启动的Activity...
  • u011959433
  • u011959433
  • 2016年03月21日 15:54
  • 2123

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

在开发项目中我们可能会经常遇到,
  • u010897392
  • u010897392
  • 2014年08月07日 09:31
  • 1629
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Activity的启动模式
举报原因:
原因补充:

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