【Android Activity相关】任务栈、启动模式相关问题总结
2017-12-14 16:09
363 查看
1.
任务栈在Android系统中,退出一个应用程序,必须要把“任务栈”中的Activity都清除出栈,才能安全地完全地退出程序。当按下back键的时候,栈内Activity会一个一个地出栈,并且调用其onDestroy方法。如果任务栈中没有Activity,就把这个任务栈销毁。另外,一个App默认只有一个任务栈,以App包名来命名。
2.
启动模式(1)standard:标准模式。在这种模式下,每次启动Activity都会重新创建一个新的Activity实例,并将其压入栈顶,不管这个Activity是否存在。 在这种模式下,每创建一个Activity都会走一遍相应的生命周期方法。这其实是非常消耗资源的,所以Android系统才会提供如下复用模式。
(2)singleTop:栈顶复用模式。启动Activity时,如果这个Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建。但是当Activity不是位于栈顶,那么该Activity还是不会被复用,于是就有了接下来的栈内复用模式。
(3)singleTask:栈内复用模式。它其实是一个单例模式,启动Activity时,首先要检测这个Activity指定的任务栈是否存在,否则创建任务栈。如果任务栈中已经存在这个Activity,那么这个Activity会被调到栈顶,并将这个Activity以上的Activity全部弹出。这时会回调一个onNewIntent方法.
(4)singleInstance:在这种模式中,启动的Activity只有一个实例,并且独享它的任务栈。这种模式在Android当中应用比较少。
~~~~~~~~~~~~~~~~~~~~~~~华丽丽的分割线~~~~~~~~~~~~~~~~~~~~~~~~~
今天在开发过程中,碰到了这样一个现象:“我在旅游商家app中启动一个二维码扫描的Activity,当我在二维码扫描Activity中点击返回键时,居然返回到了携程旅行app”。经验反复debug才定位到问题。原来,二维码扫描Activity的注册居然是这样:
<activity
android:name="ctrip.android.qrcode.QRScanActivity"
android:configChanges="locale|fontScale|orientation|keyboardHidden|screenSize"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:taskAffinity="ctrip.android.view" />它的taskAffinity属性值居然为携程旅行app的包名。在把这个值修改为旅行商家app的包名后,就能正常返回了。正好今天开发量不是特别重,下午挑了个时间好好研究了一下。
TaskAffinity
主角出现了。TaskAffinity就是指定任务栈的,并且只有在singleTask时才生效。总结
1.TaskAffinity的作用是指定任务栈,并且只有在singleTask时才有效。2.正常情况下,启动Activity都会加到当前的任务栈中。
相关文章推荐
- Android基础相关面试问题-activity面试问题(生命周期,任务栈,启动模式,跳转协议)
- Android总结之Activity启动模式
- Android开发探索第一章 Activity生命周期及启动模式总结(二)
- Activity的启动, android 任务栈及启动模式 ,Intent的用法
- 【ANDROID布局问题总结】Activity启动后EditText是否自动弹出输入法虚拟键盘的问题
- Android教程 -07 Activity的任务栈和启动模式
- Android总结之Activity启动模式
- Android中Activity启动模式SingleTask时点击Home键问题
- Android Activity:四种启动模式,Intent Flags和任务栈
- Android开发探索第一章 Activity生命周期及启动模式总结(一)
- android 学习 Activity启动模式小总结
- Android activity任务栈和四中启动模式
- Android总结篇系列:Activity启动模式(lauchMode)
- 完全理解android Activity启动模式LauchMode (深入Activity与任务栈)
- Activity的四种启动模式--看Android开发艺术探索总结
- Android Activity 四种启动模式 总结
- Android总结篇系列:Activity启动模式(lauchMode)
- Android Activity的属性及启动模式相关详解
- Activity启动模式相关总结
- Android教程 -07 Activity的任务栈和启动模式