Android-活动的四种启动模式详解

 

Android有四种启动活动的模式,分别是standard,singleTop,singleTask,singleInstance,可以在manifest.xml里通过android:launchMode属性来选择启动模式。

standard模式:

这是Android默认的启动模式,在不指定的情况下都是默认该模式,该模式不会检查返回栈里是否包含该活动,而是直接创建新的活动,从下面的例子可以看出:

package com.zgh.leo.launchmodedemo;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("MainActivityByLeo", this.toString());

        button=findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this,MainActivity.class);
                startActivity(intent);
            }
        });
    }
}

我们在MainActivity里启动三次MainActivity,日志会打印不同的内存地址,也就是说创建了三个不同的活动。

2019-01-19 09:34:07.457 /com.zgh.leo.launchmodedemo.MainActivity@e44583d
2019-01-19 09:34:15.024 /com.zgh.leo.launchmodedemo.MainActivity@2856b89
2019-01-19 09:34:17.925 /com.zgh.leo.launchmodedemo.MainActivity@1e4b7d9

如果想退出应用,需要按三次返回键,依次销毁三个活动。

singleTop:

我们修改MainActivity的启动方式为singleTop,其他代码不变,重新运行,不论点击多少次按钮,日志只有一条,也就是说只创建了一个活动,该模式会检查返回栈的栈顶是否存在该活动,若存在,则不创建新活动。

2019-01-19 09:45:47.212 /com.zgh.leo.launchmodedemo.MainActivity@86df17c

singleTask:

我们修改MainActivity的启动方式为singleTask,其他代码不变,重新运行,该模式会检查整个返回栈中是否存在该活动,如果存在则直接调用,并不会生成新的活动。

2019-01-19 10:07:25.927 / com.zgh.leo.launchmodedemo.MainActivity@86df17c
2019-01-19 10:07:32.448 /com.zgh.leo.launchmodedemo.SecondActivity@bef1b04
2019-01-19 10:07:35.611 / D/MainActivityByLeo: onRestart: 
2019-01-19 10:07:38.838 / D/SecondActivityByLeo: onDestroy: 

singleInstance:

在该模式下,会启动一个新的返回栈来管理该活动。修改SecondActivity启动模式为singleInstance,新建一个ThirdActivity,首先在MainActivity里启动SecondActivity,然后在SecondActivity里启动MainActivity,最后分别在每个Activity的onCreate方法里打印返回栈的id。 

可以看出, MainActivity、MainActivity是属于同一个返回栈的,而SecondActivity是单独的一个返回栈。

2019-01-19 10:23:06.058 6259-6259/com.zgh.leo.launchmodedemo D/MainActivityByLeo: 88
2019-01-19 10:23:14.519 6259-6259/com.zgh.leo.launchmodedemo D/SecondActivityByLeo: 89
2019-01-19 10:23:21.177 6259-6259/com.zgh.leo.launchmodedemo D/ThirdActivityByLeo: 88

 演示源码:https://download.csdn.net/download/qq_41113081/10927171

全部评论

相关推荐

三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务