Activity有四种启动模式。在AndroidManifest中进行设置,在Activity中添加“launchMode”属性。属性值分别是Standrard,SingleTop, SingleTask, SingleINstance.
standard
该启动模式是每开启一个Activity都会创建一个实例。例如:我们定义一个MainActivity,在MainActivity中设置一个按钮每点击一下,在进入一次MAinActivity。代码实现如下:
//MainActivity
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d("Activity", this.toString());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnSecond = (Button) findViewById(R.id.btnSecond);
btnSecond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intentSecond = new Intent(MainActivity.this,MainActivity .class);
startActivity(intentSecond);
}
});
}
}
//MAinActivity的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/btnSecond"
android:text="Button"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
//在Mainifest中注册,并设置启动模式。
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="standard" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
结果显示如下:
singleTop
该启动模式是如果当前开启的Activity处于栈顶,则不会在创建新的实例,如果没有处于栈顶,则会创建一个新的实例。
代码实现如下:
//MainActivity
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d("Activity", this.toString());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnSecond = (Button) findViewById(R.id.btnSecond);
btnSecond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intentSecond = new Intent(MainActivity.this,MainActivity .class);
startActivity(intentSecond);
}
});
}
}
//SecondActivity
//MAinActivity的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/btnSecond"
android:text="Button"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
//在Mainifest中注册,并设置启动模式。
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
结果显示如下:
singleTask
该启动模式是如果当前开启的Activity处于栈顶,则不会在创建新的实例,如果没有处于栈顶,会将该Activity之上的所有Activity清除出栈,然后运行该Activity,所以也不会创建新的实例。在此不在进行代码演示。
singleInstance
指定为singleInstance模式的活动会创建一个新的栈来存储自己。我们可以通过举例来理解该模式的应用场景:假设我们开发的应用中有一个活动是允许其他程序来调用的,我们想要其他程序调用的实例与我们自己程序调用该Activity的实例是同一个,以实现信息数据的共享。显然这个时候我们用其他三个变量是不可以的,所以我们可以使用singleInstance启动该Activity。
(嘤嘤,博主今天比较懒,不在进行举例说明了哦,文字描述的还是可以的,将就看吧……)