Android启动模式&&使用命令查看Activity的堆栈信息

一. Android启动模式具体解释

!\[\]



1. Standard 标准模式

说明: Android创建Activity时的默认模式,假设没有为Activity设置启动模式的话,默觉得标准模式。每次启动一个Activity都会又一次创建一个新的实例入栈,无论这个实例是否存在。

生命周期: 如上所看到的,每次被创建的实例Activity 的生命周期符合典型情况,它的onCreate、onStart、onResume都会被调用。

举例: 此时Activity 栈中以此有A、B、C三个Activity,此时C处于栈顶,启动模式为Standard 模式。

若在C Activity中加入点击事件,须要跳转到还有一个同类型的C Activity。结果是还有一个C Activity进入栈中,成为栈顶。




2. SingleTop 栈顶复用模式

说明: 分两种处理情况:须要创建的Activity已经处于栈顶时,此时会直接复用栈顶的Activity。不会再创建新的Activity;若须要创建的Activity不处于栈顶,此时会又一次创建一个新的Activity入栈,同Standard模式一样。

生命周期: 若情况一中栈顶的Activity被直接复用时,它的onCreate、onStart不会被系统调用,由于它并没有发生改变。可是一个新的方法 onNewIntent会被回调(Activity被正常创建时不会回调此方法)。

举例: 此时Activity 栈中以此有A、B、C三个Activity,此时C处于栈顶,启动模式为SingleTop 模式。情况一:在C Activity中加入点击事件,须要跳转到还有一个同类型的C Activity。

结果是直接复用栈顶的C Activity。

情况二:在C Activity中加入点击事件,须要跳转到还有一个A Activity。结果是创建一个新的Activity入栈。成为栈顶。




3. SingleTask 栈内复用模式

说明: 若须要创建的Activity已经处于栈中时,此时不会创建新的Activity,而是将存在栈中的Activity上面的其他Activity所有销毁,使它成为栈顶。

生命周期: 同SingleTop 模式中的情况一同样。仅仅会又一次回调Activity中的 onNewIntent方法

举例: 此时Activity 栈中以此有A、B、C三个Activity。此时C处于栈顶,启动模式为SingleTask 模式。

情况一:在C Activity中加入点击事件,C的启动模式是SingleTask, 须要跳转到还有一个同类型的C Activity。结果是直接用栈顶的C Activity。 情况二:在C Activity中加入点击事件,A的启动模式是SingleTask, 须要跳转到还有一个A Activity。

结果是将A Activity上面的B、C所有销毁,使A Activity成为栈顶。




4. SingleInstance 单实例模式

说明: SingleInstance比較特殊,是全局单例模式,是一种加强的SingleTask模式。它除了具有它所有特性外,还加强了一点:具有此模式的Activity仅仅能单独位于一个任务栈中。

这个经常使用于系统中的应用,比如Launch、锁屏键的应用等等,整个系统中仅仅有一个!所以在我们的应用中一般不会用到。了解就可以。

举例: 比方 A Activity是该模式,启动A后。系统会为它创建一个单独的任务栈,由于栈内复用的特性。兴许的请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁。

5. 实操 使用命令看Activity的堆栈情况

举个例子,跳转流程如下: MainActivity(Standard模式)------》MainActivity2(SingleInstance模式)------》MainActivity3(Standard模式)

我们输入以下命令查看activity的堆栈信息:

adb 复制代码

从堆栈信息中,我们得出结论。 点一次返回键,是从MainActivity3直接回到了MainActivity。 再点一次返回键,就回到了MainActivity2。 再点一次返回键,就退出了我们的应用,回到了NexusLauncherActivity。

相关推荐
素师良码14 小时前
第5篇:显示驱动必备调试工具浅析
android
维克兜率天14 小时前
【维克】配对交易的季节性:哪些品种适合长拿?
android·开发语言·笔记·python·算法·kotlin·量化
墨天梦15 小时前
B06_XML控件布局与ViewBinding
android·kotlin
晚风叙码15 小时前
MySQL 表的操作:从建表到删表,一篇讲清楚
android·mysql·oracle
事圆则缓16 小时前
Android 性能优化常见工具与使用场景:从症状到证据的排查指南
android·性能优化
avi911117 小时前
Unity 非后台,非自动构建,但统计报表 BuildReport ,构建自动化系统C#
android·webserver·ios打包·admin·c#后台·unity打包系统·unity自动构建
新鲜势力呀17 小时前
PHP 定时任务系统实战:从 Cron 混乱执行到任务调度中心 + Redis队列 + 失败重试
android·java·redis
YF021118 小时前
Android 16系统 如何修改 eth0 IP ?
android
其实防守也摸鱼18 小时前
渗透测试学习计划(全栈综合 · 零基础进阶)
android·数据库·学习·安全·oracle·自动化·学习方法
释厄62318 小时前
BSD 简单真理循环论——简单真理 × 复杂循环=大一统
android·开发语言·kotlin