Android通俗易懂理解堆栈的使用

本文深入解析Android中Activity的四种启动模式:standard、singleTop、singleTask与singleInstance,阐述每种模式的特点及应用场景,帮助开发者更灵活地控制页面跳转逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

在Android开发中,都需要从一个activity启动到另一个activity,而启动时就需要判断新的activity的启动模式。以前一直都不是特别了解这几个模式都是干啥的,只知道拿来用,网上的许多讲解感觉都是写了一大篇,理解起来比较费劲。今天详细讲解一下,如有不对的地方,请大家留言指正。

二、概述

activity有四重启动模式standard(默认),singleTop、singleTask、singleInstance。

1、standard

标准模式,也是系统默认模式,每次启动一个activity都会创建一个新的实例,会执行完整的activity流程。点击返回按钮时会按照点击的按钮原路返回,如有四个activity:A、B、C、D。点击顺序为:A-B-C-C-C,则按返回按钮后执行的顺序为C-C-C-B-A。

2、singleTop

栈顶复用模式,简单理解为就是如果一个activity重复点击,则只会有一个实例,不会执行ocreate方法,只会执行OnNewIntent回调。如点击顺序如下时:A-B-C-C-C,则按返回按钮后返回顺序为C-B-A。

3、singleTask

栈内复用模式:可以理解为只要是执行过的activity,当通过跳转再次跳转到该页面后不会重新创建,并且在它之后执行的activity都将销毁(默认)。如执行以下顺序A-B-C-C-C-B,则返回顺序为B-A。当中的三个C-C-C被销毁了。

4、singleInstance

单一实例模式,整个手机操作系统里面只有一个实例存在。不同的应用去打开这个activity 共享公用的同一个activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。这种模式的使用情况比较罕见,在Launcher中可能使用。或者你确定你需要使Activity只有一个实例。建议谨慎使用。

三、具体使用方法

1、在androidMainfest.xml中使用,在引用activity加入如下代码:

android:launchMode="singleTop"

2、在跳转到指定activity时,加入flags

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

3、常用Intent的标志

  • Intent.FLAG_ACTIVITY_NEW_TASK: 功能和singleTask相同
  • FLAG_ACTIVITY_SINGLE_TOP       : 功能和singleTop相同
  • FLAG_ACTIVITY_CLEAR_TOP        :  启动的新的activity上方的所有activity都要出栈,可以和Flag_activity_new_task联合使用,

四、总结

在选择启动模式时:如果跳转页面深度较少,并且防止一个页面只需要返回一次就退出时,可以使用singleTop;如点击消息通知进入activity。如果点击层次足够深,多次跳转到相同页面,并且返回时希望当中点击的页面不出现时则使用SingleTask。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值