Activity的启动模式

  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>

结果显示如下:
Activity的启动模式_第1张图片

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>

结果显示如下:
Activity的启动模式_第2张图片
  

singleTask

  该启动模式是如果当前开启的Activity处于栈顶,则不会在创建新的实例,如果没有处于栈顶,会将该Activity之上的所有Activity清除出栈,然后运行该Activity,所以也不会创建新的实例。在此不在进行代码演示。

singleInstance

  指定为singleInstance模式的活动会创建一个新的栈来存储自己。我们可以通过举例来理解该模式的应用场景:假设我们开发的应用中有一个活动是允许其他程序来调用的,我们想要其他程序调用的实例与我们自己程序调用该Activity的实例是同一个,以实现信息数据的共享。显然这个时候我们用其他三个变量是不可以的,所以我们可以使用singleInstance启动该Activity。

  (嘤嘤,博主今天比较懒,不在进行举例说明了哦,文字描述的还是可以的,将就看吧……)

你可能感兴趣的:(Activity,启动模式)