【Android入门到项目实战--2.3】—— 活动的四种启动模式(standard、singleTop、singleTask、singleInstance)

目录

一、活动的启动模式

1、standard

2、singleTop

3、singleTask

4、singleInstance


 

本篇文章主要讲解活动的生命周期和活动的启动模式。

一、活动的启动模式

        活动的启动模式共有4种,分别是standard、singleTop、singleTask和singleInstance;

可在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式。

1、standard

        此模式是活动的默认启动模式,在此模式下,每启动一个新活动,它就会入栈,并处于栈顶位置,对于此模式的活动,系统不会在乎这个活动是否在返回栈中存在,每次启动都会创建该活动的实例。

下面尝试实验。

java类:

        添加如下代码,点击按钮会再次显式跳转到当前活动,主要演示standard模式下的活动。点击三次按钮,需要点击三次返回才能退出程序,这是因为创建了三个活动实例,返回栈中也存在三个此活动实例。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_csdn3);
        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(csdn3.this,csdn3.class);
                    startActivity(intent);
                }
            });
    }

2、singleTop

        本模式下,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。singleTop模式可以很好的解决重复创建栈顶活动问题

        与上一模式的不同是,点击多次按钮跳转活动后,只需点击一次返回键即可退出程序,但是只是启动栈顶活动时会这样,启动非栈顶活动,还是会创建新的活动实例。

3、singleTask

        singleTop存在的问题是:如果活动处于非栈顶位置,还是会创建多个活动实例,而singleTask模式可以让活动在整个应用程序的上下文中只存在一个实例。在此模式下,每次启动该活动时系统首先会在返回栈中检查是否存在该活动实例,如果已存在则直接使用该实例,并把此活动之上的所有活动出栈;如果不存在则创建一个新的活动实例。

下面演示一下:从csdn2和csdn3活动间跳转。

修改AndroidManifest.XML中的启动模式:


            android:launchMode="singleTask"

部分代码如下:

<activity
            android:name=".csdn2"
            android:launchMode="singleTask"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

csdn2类:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_csdn2);
        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(csdn2.this,csdn3.class);
                startActivity(intent);
            }
        });
    }

csdn3类:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_csdn3);
        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(csdn3.this,csdn2.class);
                startActivity(intent);
            }
        });
    }

效果如下 :

如果是默认模式,点击跳转csdn3后,在点击跳转csdn2,需要点击三次返回键可退出程序;

而singleTask模式下,跳转若干次后,只需点击一个返回键即可退出程序。

4、singleInstance

        此模式比较复杂,假想以下场景:有一个活动允许其他程序调用,如果想实现其他程序和我们程序共享这个活动实例,如何实现?singleInstance模式可解决此问题,此模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序,公用一个返回栈。


希望本文章对你有帮助,如果你对Android开发感兴趣,请持续关注本专栏,帮助你从入门到项目实战。

猜你喜欢

转载自blog.csdn.net/Tir_zhang/article/details/129655637