程序员人生 网站导航

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

栏目:综合技术时间:2015-07-14 14:09:49

Android的4种加载模式:

 

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

 

4种加载模式:

standard:标准模式,默许

singleTop:Task顶单例模式

singleTask:Task内单例模式

singleInstance:全局单例模式

 

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

可以把Task理解成Activity栈,Task以栈的情势来管理Activity。

 

 

下面是4种模式:

1.standard模式

每次通过这类模式来启动目标Activity时,Android会为目标Activity创建1个新的实例,并将干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() + " " + ",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总是1样的,这就表明这类加载模式不会启动新的Task。

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




2.singleTop

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

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

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



3.singleTask


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

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

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

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

 

演示说明第3种情况:

 

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

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








1表示活动1和它的加载模式

2表示活动2和它的加载模式

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

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

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

应当可以充分的说明上述第3种情况。



4.singleInstance



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

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

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

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

采取singleInstance加载模式加载Activity总是位于Task栈顶,由于Task栈中只有1个Activity。

 

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





------分隔线----------------------------
------分隔线----------------------------

最新技术推荐