【Android入门到项目实战--2.3】—— 活动的四种启动模式(standard、singleTop、singleTask、singleInstance)
创始人
2025-05-30 20:19:43

目录

一、活动的启动模式

1、standard

2、singleTop

3、singleTask

4、singleInstance


 

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

一、活动的启动模式

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

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

1、standard

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

下面尝试实验。

java类:

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

    @Overrideprotected 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() {@Overridepublic 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"

部分代码如下:

csdn2类:

    @Overrideprotected 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() {@Overridepublic void onClick(View view) {Intent intent = new Intent(csdn2.this,csdn3.class);startActivity(intent);}});}

csdn3类:

    @Overrideprotected 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() {@Overridepublic void onClick(View view) {Intent intent = new Intent(csdn3.this,csdn2.class);startActivity(intent);}});}

效果如下 :

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

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

4、singleInstance

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


 

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

相关内容

热门资讯

三曼村:一个观察中国乡村转型的... 来源:@CGTNGlobalBusiness微博 【三曼...
俄外长:日本正加速军事化 最好... 转自:证券时报人民财讯12月28日电,俄罗斯外长拉夫罗夫在塔斯社28日播发的专访中说,日本领导层最近...
“2025上海台北城市论坛”在... 转自:北京日报客户端以“科技改变生活”为主题的“2025上海台北城市论坛”28日在沪举行。论坛旨在推...
智者勇进•接续奋进新江苏|涟水... 转自:扬子晚报2025 年,涟水县文化广电和旅游局答卷亮点纷呈 —— 省文化艺术政府奖斩获六项大奖,...
最新或2023(历届)新疆养老...  新疆养老保险个人账户查询,  1、电话查询,拨打新疆自治区12333查询热线;  "12333"热...