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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/f552126367/article/details/84654008

一、前言

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

二、概述

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

1、standard

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

2、singleTop

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

3、singleTask

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

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。

猜你喜欢

转载自blog.csdn.net/f552126367/article/details/84654008