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

目录

一、活动的启动模式

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开发感兴趣,请持续关注本专栏,帮助你从入门到项目实战。

相关内容

热门资讯

广东省集体建设用地使用权出租合... 第一条 本合同双方当事人:  出租方:_________(以下简称甲方)  地址:_________...
建筑合同范本-建筑工程承包合同... 甲方:×××(写明名称、法定代表人和住所)(发包方)乙方:×××(同上)        (承包方)甲...
建筑合同范本-建筑设计合同样本... (民用建设工程设计合同)工程名称: 工业厂房工程工程地点: 市合同编号:2002-珠(西)-011(...
js下载blob二进制文件流 js下载blob二进制文件流 项目需求 在项目开发中,经常会遇到需要调用接口从后端获取...
建筑合同范本-土地使用权租赁合... 甲方:_________(出租方),系根据中国法律成立并合法存续的_________企业。  企业法...
建筑合同范本-建筑材料供货合同... 甲方(需方):____________________________________地址:____...
点云分割预研(可行方案) 文章目录激光雷达点云分割1 概述2 相关模型3 模型选型要求及依据3.1 要求3.2 模型4 模型测...
建筑合同范本-英文建筑合同样本... Party A:Party B:Contract NoDate:Signed at:Witnesse...
建筑合同范本-园林古建筑合同样... 发包方:(以下简称甲方)承包方:(以下简称乙方)经甲、乙双方协商一致,就甲方委托乙方建造兰埔花园园林...
建筑合同范本-土地使用权租赁协... 甲方:_________集团公司  住所:_________省_________市_________...
建筑合同范本-农村土地出租排水... 甲方:_________  法定代表人:_________  住址:_________  邮编:__...
合同范本-委托开发合同书样本 ... 甲方委托乙方研制_________装置,特商定如下合同:1.研制内容:_________。2.技术要...
Python爬虫——Pytho... Beautiful Soup 简称 BS4(其中 4 表示版本号)是一个...
【linux】基本指令详解 文章目录【Linux】1. 基本指令详解前言--Linux操作系统由来1.1Linux发展史1.2L...
合同范本-技术培训合同样本 技... 委托方:_________??法定代表人或负责人:________??服务方:_______??法定...
合同范本-科技查新合同样本 房... 合同编号:查新项目名称中文:英文:委托单位名称:通信地址:邮政编码:电子信箱:负责人电话:传真:联系...
合同范本-软件外包合同范本样本... 甲方:_________乙方:_________(个人)身份证号码:________________...
Git 和 GitHub 超入... 工作流程 工作的流程应该遵循以下步骤: (1) 在 issue 跟踪系统中创建一个新的...
技术服务合同(含技术培训、技术... 项目名称:____________________________________________委...
转让技术秘密和补偿贸易合作生产... 甲方:____________________________________地址:________...