用 singleTask 启动模式实现退出应用功能
2021-04-12 本文已影响0人
栩檬
问题
场景:ActivityA 启动 ActivityB,ActivityB 启动 ActivityC,ActivityC 启动 ActivityA,如何实现在 ActivityA 中点击返回键退出应用的功能?
![](https://img.haomeiwen.com/i17607515/8354fc7b27c3567c.png)
回答
将 ActivityA 的启动模式设置为 singleTask。
代码示例: AndroidManifest.xml文件
<application ...>
...
<activity android:name="ActivityA" android:launchMode="singleTask"/>
...
</application>
解释
Activity 的 singleTask 启动模式
standard:标准模式,为系统默认模式。每次启动一个 Activity 都会创建一个新的 Activity 实例。
![](https://img.haomeiwen.com/i17607515/d6921bc8b1f9c2b1.png)
singleTask:栈内复用模式。如果 Activity 的实例在栈中存在,启动时不再创建新的实例,而会将其调到栈顶并回调其 onNewIntent() 方法。
![](https://img.haomeiwen.com/i17607515/dce6f571b27d92de.png)
功能实现的原理
-
当我们依次启动多个 Activity 时,系统会创建他们的实例并把它们按顺序放入任务栈中。
依次启动多个 Activity.png
此时,每按一次返回键,就会有一个 Activity 出栈。当最后一个 Activity 出栈后,应用就自动退出了。
最后一个 Activity 出栈后,应用退出.png
-
当 ActivityA 的启动模式设置为 singleTask 时,ActivityA 的启动会导致在它上面的所有 Activity 出栈。
如果 ActivityA 位于栈底,那么再次启动 ActivityA 后,栈中就只剩下这一个 Activity 了。此时,点击返回键,会导致 ActivityA 出栈,应用退出。
再次启动 ActivityA 后点击返回键.png
附
测试设备参数
操作系统:MIUI 12.0.4 稳定版 (Android 10)
参考资料
任玉刚.Android 开发艺术探索[M].电子工业出版社:北京,2015:16-17.