Android 启动模式、任务和返回栈

工作这么久了,一直说写点东西都没具体实施下来,刚好最近不是很忙,以后争取每周1篇左右,这篇比较基础就当练手熟悉一下流程,以后我会尽量写一些深入点的东西,可能是Android也可能是java后台开发相关的,或者是反编译相关的,各位大佬轻喷。

启动模式

这个大家应该都很熟悉,每个Android开发者或多或少都了解一点。

"standard"(默认启动模式)

standard又叫标准模式,是activity默认的启动模式及不设置launchMode属性,则自动会使用该模式。该模式表示的是只要启动该模式的activity就会在同一个任务栈里面创建一个新的实例,该activity可能在栈内存在多个实例。比如任务栈A-B-C,A设置了标准模式,C启动A,任务栈变成了A-B-C-A,然后如果我们按返回键的话出栈顺序就是依次出栈A-C-B-A,

"singleTop"(栈顶复用模式)

该启动模式表示,如果在启动Activity的时候发现该Activity已经存在并且处于当前任务栈栈顶,则复用已经存在的实例,不在创建新的实例而是调用该Activity的onNewIntent()方法。如果该Activity不在栈顶则创建新的实例加入到当前任务栈类,具体类似上面的 标准模式。这种模式的Activity在栈内也可能存在多个实例,并且该模式的Activity可以被实例化多次。

"singleTask"(栈内复用模式)

该启动模式表示,如果在启动Activity的时候发现该activity已经存在,不管在不在栈顶,都会复用已经存在的实例,不在创建新的实例而是调用该Activity的onNewIntent()方法。该操作会将该实例提到栈顶,该实例上面的其他实例会被销毁出栈。比如任务栈d-a-b-c,a设置了singTask模式,c启动a,任务栈会将bc出栈,任务栈变成d-a。

"singleInstance"(单例模式)

该启动模式表示,设置该启动模式的Activity,你可以理解为整个系统只会存在一个实例,并且单独在一个任务栈内,该任务栈有且只有一个该Activity实例。1.不存在,首先会新建一个任务栈,其次创建该Activity实例。 2.存在,则会直接引用该实例,并且回调onNewIntent()方法。该模式可以看成一个特殊的singleTask模式,比如任务栈1(a-b-c-d),任务栈2(e),e为单例模式,d启动e会直接将任务栈2切换到前台并且回调e的onNewIntent()方法。

任务和返回栈

任务我们可以看成是一个activity实例的集合,使用的是栈的方式管理这个集合,通常我们叫他返回栈,activity在栈里面的顺序就是按照我们打开的顺序依次存放。

我们需要知道的是1.任务和返回栈遵循后进先出原则。2.打开或者退出一个activity任务栈都会相应的增加或者减少一个activity实例,任务栈被用来有序的管理这个哪个activity可以与用户交互,只有栈顶的activity才能与用户进行交互。3.在我们退出应用程序时,必须把所有的任务栈中所有的activity清除出栈时,任务栈才会被销毁。当然任务栈也可以移动到后台, 并且保留了每一个activity的状态. 可以有序的给用户列出它们的任务, 同时也不会丢失Activity的状态信息。4.一个应用可能有多个任务栈,一个任务栈也可能是多个应用activity的集合。5.返回键返回的大多数情况下都是返回到上一个activity,有种特殊情况,如果activity设置 了singleTask并且启动的是另外一个应用程序中的Activity,这个时候当发现该Activity正好处于一个后台任务当中的话,就会直接将这整个后台任务一起切换到前台。此时按下返回键会优先将目前最前台的任务(刚刚从后台切换到最前台)进行回退,具体看下图(Android Docs):





转载于:https://juejin.im/post/5c19edcef265da611a47ce53

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 启动模式是一种定义了如何启动一个 Activity 的方式。它可以通过在 AndroidManifest.xml 文件中的 <activity> 元素上设置 launchMode 属性来指定。 常见的 Android 启动模式有四种:standard、singleTop、singleTask 和 singleInstance。 微信小程序是一种在微信平台上运行的应用程序,它比传统的 Android 应用程序更加轻量级、快速启动,并且不需要像传统应用程序一样去下载和安装。 当我们从微信主界面启动一个微信小程序时,微信会为该小程序创建一个新的任务,并且为该小程序创建一个新的 Activity 并加载该小程序的内容。 无论是在哪个界面点击进入微信小程序,该小程序都会重新启动,表现出的行为和在 Android 中的 standard 启动模式一致。 如果我们在微信小程序的某个页面点击返回按钮,会回到上一个页面,这表现出的行为和在 Android 中的 singleTop 启动模式一致。 微信小程序没有类似于 singleTask 或 singleInstance 这样的启动模式选项,因为它是在微信平台上独立运行的。 在Android中,我们可以通过设置 launchMode 属性来控制 Activity 的启动模式,而在微信小程序中,这种控制是由微信平台自身决定的,并不由开发者来设置。 综上所述,Android 启动模式与微信小程序之间没有直接的对应关系,微信小程序在启动过程中表现出的行为与 Android 中的 standard 启动模式一致,而微信小程序的启动模式是由微信平台自身决定的,开发者无法进行设置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值