Android---33---四种加载模式

Android的四种加载模式:

首先在配置Activity时即可指定该Activity用哪种加载模式,通过android:launchMode属性。

四种加载模式:

standard:标准模式,默认

singleTop:Task顶单例模式

singleTask:Task内单例模式

singleInstance:全局单例模式

Android是通过Task对Activity进行管理的,通过getTaskID()方法可以获得当前活动的Task的ID。

可以把Task理解成Activity栈,Task以栈的形式来管理Activity。

下面是四种模式:

1.standard模式

每次通过这种模式来启动目标Activity时,Android会为目标Activity创建一个新的实例,并将干Activity添加到当前Task栈中----这种模式不会启动新的Task,新Activity将被添加到原有的Task中。

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

public class MainActivity extends Activity implements OnClickListener {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		LinearLayout layout = new LinearLayout(MainActivity.this);
		layout.setOrientation(1);
		setContentView(layout);

		TextView textView = new TextView(MainActivity.this);
		textView.setText("ACtivity为  :" + this.toString() + "\n" + ",Task Id为:"
				+ this.getTaskId());

		Button button = new Button(this);
		button.setText("启动Main");
		layout.addView(textView);
		layout.addView(button);

		button.setOnClickListener(this);

	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Intent intent = new Intent(MainActivity.this, MainActivity.class);
		startActivity(intent);
	}
}

多次点击按钮,程序会不断的启动当前活动,活动的hashCode变化,但是TaskId总是一样的,这就表明这种加载模式不会启动新的Task。

当按返回键的时候,启动的活动会逐一从栈顶删除。

2.singleTop

这种模式与标准模式基本相似,但是有一点不同:当将要被启动的目标Activity已经位于栈顶时,系统不会重新创建目标Activity实例,而是直接复用已有的Activity实例。

将上例中的launchmode改为singleTop,无论用户点击多少次按钮,界面上的程序不会有任何变化。

如果说要被启动的目标Activity没有位于Task栈顶,此时系统会重新创建目标Activity实例,并将它加载到Task的栈顶----此时与标准模式完全相同。

3.singleTask

采用这种加载模式的Activity在同一个Task内只有一个实例,启用目标Activity时,有下面三种情况:

1.如果将要启动的活动不存在,则创建,放入栈顶

2.如果目标Activity已经存在于栈顶,则与singleTop一样

3.如果目标Activity已存在,但是不是位于栈顶,系统会将目标活动前的活动移出Task栈,使得目标Activity位于栈顶

演示说明第三种情况:

程序中有两个活动,活动中都有一个TextView和一个Button,TextView用来显示活动的hashCode以及TaskID,Button用来启动不同的活动。

当按下第一个活动中的按钮时会启动第二个活动,当按下第二个活动中的按钮的时候会启动第一个活动。

1表示活动1以及它的加载模式

2表示活动2以及它的加载模式

这就是运行截图与示意图。

首先先创建并启动的是1,再创建启动2,再创建启动1,再启动2,已经有2了,不会创建,所以便把2之前的1移出栈,使得2位于栈顶。

如果在接着启动1的话,这个1会再进行创建,已经不是原来的活动1了。

应该可以充分的说明上述第三种情况。

4.singleInstance

再这种加载模式下,系统保证无论从哪个Task中启动目标活动,只会创建一个目标活动实例,并会使用一个全新的Task栈来装载该活动实例

当系统采用该模式启动目标活动的时候,有以下两种情况:

1.如果将要启动的活动不存在,则先创建一个Task,再创建目标活动,加入栈顶

2.如果目标活动已经存在,无论它在哪个应用程序中,无论在哪个Task中,系统会把还Activity所在的Task栈转到前台,从而使用该Activity显示出来

采用singleInstance加载模式加载Activity总是位于Task栈顶,因为Task栈中只有一个Activity。

将上例中的两个活动的加载模式都改为singleInstance。

时间: 2024-10-30 05:03:10

Android---33---四种加载模式的相关文章

Activity四种加载模式

android activity四种加载模式,有 >>>standard: 标准模式,这是默认的加载方式 >>>singleTop : task顶单例模式 >>>singleTask : Task内单列模式 >>>singleInstance :全局单列模式 <1>standard: 标准模式,这是默认的加载方式 public class StandardTest extends Activity { @Override

转载 android activity的四种加载模式

Activity的四种加载模式 -- singleTask 和 singleInstance模式 2011-11-02 21:23:30 分类: 嵌入式 Activity的启动模式可以通过AndroidManifest.xml文件中的<activity>元素的属性来指定,一共有4中模式:   <activity android:name="ActivityMain" android:launchMode="singleTask"></a

Android中Activity四种加载模式

Activity四种加载模式 我们知道在配置Activity的时候可以指定android:lauchMode属性,该属性用于配置该Activity的加载模式,概述行支持以下四种: 1.standard: 标准模式,这是默认的加载模式. 2.singleTop: Task顶单例模式. 3.singleTask: Task内单例模式. 4.singleInstance: 全局单例模式. 那么Activity为什么需要制定加载模式呢? 由于在Android上启动一个应用后,系统会自动的创建一个属于该应

Activity的四种加载模式

Activity的加载模式是在清单文件AndroidManifest.xml文件中进行设置 <activity android:name="...." android:label="@string/app_name" android:launchMode="singleTask"(Activity的加载模式) android:theme="@android:style/Theme.Light.NoTitleBar" &g

Activity的四种加载模式(附:Intent标记位)

Activity的加载模式是在清单文件AndroidManifest.xml文件中进行设置 <activity android:name="...." android:label="@string/app_name" android:launchMode="singleTask"(Activity的加载模式) android:theme="@android:style/Theme.Light.NoTitleBar" &g

Activity四种加载模式(解释的非常好)

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity.可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity. 这需要为Activity配置特定的加载模式,而不是使用默认的加载模式. 加载模式分类及在哪里配置 Activity有四种加载模式: standard singleTop singleTask singleInstance 设置的位置在AndroidManifest.xml文件中activity元素的

activity的四种加载模式介绍

  四种加载模式的介绍: a) Standard : 系统默认模式,一次跳转即会生成一个新的实例:    b) SingleTop : 和 standard 类似,唯一的区别就是当跳转的对象是位于栈顶的activity时,程序将不会生成一个新的activity实例,而是直接跳到现在存于栈顶的那个activity实例:    c) SingleTask: singleTask 模式和后面的singleInstance 模式都只是创建一个实例:该模式下,无论调转的对象是不是位于栈顶的activity

singleTop和singleTask有什么区别?(活动 Activity 四种加载模式)

singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例.(注意是栈顶,不在栈顶照样创建新实例!) singleTask模式:当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例.如果有直接将intent发送给它. Activity的四种加载模式: 1.standard :系统的默认模式,一次跳转即会生成一个新的实例.假设有一个activit

Activity详解四 activity四种加载模式

先看效果图: 1概述 Activity启动方式有四种,分别是: standard singleTop singleTask singleInstance 可以根据实际的需求为Activity设置对应的启动模式,从而可以避免创建大量重复的Activity等问题. 设置Activity的启动模式,只需要在AndroidManifest.xml里对应的<activity>标签设置android:launchMode属性,例如: <activity android:name=".A1&

Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance

standard:Activity的默认加载方法,即使某个Activity在Task栈中已经存在,另一个activity通过Intent跳转到该activity,同样会新创建一个实例压入栈中.例如:现在栈的情况为:A B C D,在D这个Activity中通过Intent跳转到D,那么现在的栈情况为: A B C D D .此时如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B.此时如果依次按返回键,D  D C B A将会依次弹出栈而显示在界面上. singleTop:如