您的位置:首页 > 移动开发 > Android开发

Android中Activity的4种启动模式

2014-04-09 11:29 363 查看
首先Activity在创建后是存入一个任务栈中,用来管理Activity。Android中Activity有四种启动模式,分别是:

standard :每次通过一个Intent启动一个Activity的时候,都会在当前栈里面新建一个Activity。

singleTop
:如果当前栈顶的Activity被再次启动,不会在当前栈中新建一个Activity,只会通过onNewIntent方法来重用这个实例。没有这个Activity的话,就在当前栈中新建一个Activity。

singleTask
:如果在当前栈中有一个Activity实例,那么再次启动同一个Activity的时候,当前栈中的Activity会被移到栈顶(根据栈的特性,这个栈中我们启动的Activity上面的其他Activity都会被移除栈)。

以上三种都是在同一个栈中的描写,接下来的singleInstance可以重新开启一个栈,从而实现了跨应用来共享Activity。

singleInstance
:当新建一个singleInstance 的Activity,会重新开辟一个栈用来存储,并且这个栈有且只能有一个[b]singleInstance
的Activity,如果其他应用程序通过Intent来打开这个Activity的时候,会使用onNewIntent来重用这个栈中的Activity。
[/b]

测试代码:
XML文件
<activity
android:name=".Test"
android:label="@string/app_name"
android:launchMode="singleInstance"    >        <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Ser"
android:label="@string/app_name"
android:launchMode="standard"     >
</activity>
Test类:
public class Test extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
Button button=(Button)findViewById(R.id.button);
String s="Test"+getTaskId();//得到Task的ID,也就是上面提到的栈ID
Log.e("TAG",s);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent =new Intent(Test.this,Ser.class);
startActivity(intent);
}
});
}
}


Ser类:
public class Ser extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.ser);
Button button=(Button)findViewById(R.id.ser);
String s="Ser"+getTaskId();
Log.e("TAG",s);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent =new Intent(Ser.this,Test.class);
startActivity(intent);
}
});
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: