Android中,活动的几种启动模式

活动的启动模式

活动的启动模式一共有4种,分别是standard,singleTop,singleTask,singleInstance。在AndroidMainfest.xml中,可以给标签指定android:launchMode的属性来选择启动模式。

  1. standard模式
    简单明了的说,standard模式,在每次启动之前都会创建该活动的一个实例。直接上代码:
button1.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v){
        Intent intent=new Intent(FirstActivity.this,FirstActivity.class);
        startActivity(intent);
    }
});

可以看到这段代码的意思是在FirstActivity的基础上再次启动FirstActivity,每次点击我的项目中的button1就会创建一个实例,因此你创建几次,需要点击几次back键才能退出。原理图如下所示:Android中,活动的几种启动模式_第1张图片

  1. singleTop模式

在活动启动的时候,如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。具体例子如下:
我们先在AndroidMainfest.xml中修改一下使用该模式

<activity android:name=".FirstActivity"
    android:launchMode="singleTop"
    android:label="This a FirstActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

在修改一下FirstActivity中的代码`

button1.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v){
        Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
        startActivity(intent);
    }
});

点击按钮1之后去活动二。

SecondActivity:

button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent=new Intent(SecondActivity.this, FirstActivity.class);

        startActivity(intent);
    }
});

可以发现程序运行时,创建了两个不同的活动一的实例。这是由于在活动二中再次启动活动一的时候,栈顶活动已经变为了活动二,因此会创建一个新的活动一实例。现在按下back键,会返回到活动二,再次按下返回又会返回活动一再次按就会结束。
原理图为:
Android中,活动的几种启动模式_第2张图片
3. singleTask

上面的例子看出虽然singleTop能一定程度解决创建重复实例的过程但是还是不是很完善。利用singleTask能够很好的解决这个问题。把当前的活动模式指定为singleTask,每次启动这个活动的时候,系统首先会去栈里面检查是否存在这个活动的实例。如果发现存在则这个活动以上的活动就全部出栈,如果没有就创建新的实例。

<activity android:name=".FirstActivity"
    android:launchMode="singleTask"
    android:label="This a FirstActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

在活动一重写onStart方法

@Override
protected void onStart() {
    super.onStart();
    Log.d("FirstActivity","onRestart");
}

在活动二重写onDestroy方法

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d("SecondActivity","onDestroy");
}

原理图为:Android中,活动的几种启动模式_第3张图片

  1. singleInstance
    singleIntance模式实际上就是创建一个新的栈将一个特定的活动放进去,从而应用来使用这个活动的时候,都会共用这个一个特殊的栈。
<activity android:name=".SecondActivity"
    android:launchMode="singleInstance">

    <intent-filter>

        <action android:name="com.example.activitytest.ACTION_START" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="com.example.activitytest.MY_CATEGORY" />
    </intent-filter>
</activity>

Android中,活动的几种启动模式_第4张图片

你可能感兴趣的:(安卓,安卓,android)