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 {@Overrideprotected 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);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent(MainActivity.this, MainActivity.class);startActivity(intent);}}


Android---33---四种加载模式_第1张图片



多次点击按钮,程序会不断的启动当前活动,活动的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用来启动不同的活动。

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


Android---33---四种加载模式_第2张图片Android---33---四种加载模式_第3张图片Android---33---四种加载模式_第4张图片Android---33---四种加载模式_第5张图片






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。



Android---33---四种加载模式_第6张图片


更多相关文章

  1. Android 虚拟摇杆,多种模式回调,返回距离级别,方向,角度。
  2. 【Android学习入门】Android中activity的启动模式
  3. Android ListView滑动加载
  4. Android 1.5: 飞行模式分析
  5. Android中WebView如何加载JavaScript脚本
  6. android 设计模式相关内容
  7. Android 异步任务加载图片代码
  8. android 加载模式

随机推荐

  1. android日历多选 日历插件
  2. Android蓝牙操作
  3. Android(安卓)GET,POST向服务器端发送数
  4. ActivityManagerService启动过程分析
  5. Android配置文件权限一览表
  6. Android事件分发机制研究
  7. 超详细图文讲解android studio导入第三方
  8. 解决 “Error generating final archive:
  9. Android:sqlite3:not found
  10. 【转】anroid中建立sdcard