Android:Activity的启动模式及应用场景

大家好,我是似曾相识2022。不喜欢唱跳篮球,但对杰伦的Rap却情有独钟。

今天给大家介绍下安卓开发中不得不涉及的Activity启动模式及应用场景。

Activity 一共有四种启动模式,分别是Standard模式SingleTop模式SingleTask模式 以及SingleInstance模式 ,默认不主动设置的情况下是Standard模式

  • Standard模式: 只要创建了Activity的实例,一旦启动后就会向任务栈中添加该实例,退出Activity后会任务栈中销毁该实例,即调用finish() 方法。

例如当前依次启动了ActvivtyA------>ActvivtyB------>ActvivtyC,ActvivtyC为Standard模式。此时再次启动ActvivtyC,任务栈中会一直将该实例加入当前任务栈中:

使用场景: 默认启动模式,如果没有特殊功能的页面都可使用该模式。

  • SingleTop模式: 该模式和Standard 模式几乎一致,只要有新的实例就向任务栈中添加实例,唯一的区别是仅当当前任务栈栈顶的实例和当前启动的目标实例是同一个Activty的时候采取复用模式,不再创建新的实例。

例如当前依次启动了ActvivtyA------>ActvivtyB------>ActvivtyC,ActvivtyC为SingleTop模式。此时再次启动ActvivtyC,任务栈不会再去添加一个ActvivtyC实例,会复用当前栈顶的ActvivtyC。

使用场景: 当新启动的Activty 和当前是同一个页面的时候即可采用此模式。如一些新闻详情等等页面,此时还需注意我们需要在onNewIntent方法中重新获取数据。

  • SingleTask模式: 该模式和SingleTop 模式有点类似,都是复用栈顶实例。区别是SingleTask 不管目标Activity是否在栈顶都会复用该实例,同时还会将该实例置顶,在该实例之上的实例都会被销毁。

例如当前依次启动了ActvivtyA------>ActvivtyB------>ActvivtyC------>ActvivtyD------>ActvivtyE------>ActvivtyC,ActvivtyC为SingleTask模式。此时再次启动ActvivtyC,任务栈不会再去添加一个ActvivtyC实例,会复用当前栈中的ActvivtyC并置为栈顶,同时将ActvivtyD、ActvivtyE销毁。

使用场景: 一些常驻的页面,例如APP首页之类的页面。

  • SingleInstance模式: 由名字可知,它是一个单例模式。和SingleTask 模式有点类似,区别在于SingleTask 模式仅仅是在当前栈中单例,而SingleInstance 模式是整个App中单例,启动这类模式的Activity时,会创建一个单独的任务栈。

例如当前依次启动了ActvivtyA------>ActvivtyB------>ActvivtyC------>ActvivtyD,ActvivtyD为SingleInstance模式,那么它是单独在一个任务栈中的。

使用场景: 其实这类模式在常用的应用中使用较少,一般打电话的场景会用到。

总结: 不同功能的页面需要匹配到不同的启动模式,一些特殊的需求可能会有不同的跳转,这时配合这四种模式能够得到有效解决。特别需要注意在使用SingleTopSingleTask 模式的时候由于是复用模式需要在该Activity 重写onNewIntent方法去重新获取新数据。

好了,以上便是Activity的启动模式及应用场景的全部内容,希望对大家有所帮助!

相关推荐
shuangrenlong12 分钟前
笔记kotlin注意的点
kotlin
此去正年少12 分钟前
编写adb脚本工具对Android设备上的闪退问题进行监控分析
android·adb·logcat·ndk·日志监控
落羽凉笙33 分钟前
Python基础(4)| 玩转循环结构:for、while与嵌套循环全解析(附源码)
android·开发语言·python
十幺卜入1 小时前
Unity3d C# 基于安卓真机调试日志抓取拓展包(Android Logcat)
android·c#·unity 安卓调试·unity 安卓模拟·unity排查问题
frontend_frank1 小时前
脱离 Electron autoUpdater:uni-app跨端更新:Windows+Android统一实现方案
android·前端·javascript·electron·uni-app
薛晓刚2 小时前
MySQL的replace使用分析
android·adb
DengDongQi2 小时前
Jetpack Compose 滚轮选择器
android
stevenzqzq2 小时前
Android Studio Logcat 基础认知
android·ide·android studio·日志
代码不停2 小时前
MySQL事务
android·数据库·mysql
朝花不迟暮2 小时前
使用Android Studio生成apk,卡在Running Gradle task ‘assembleDebug...解决方法
android·ide·android studio