【Android基础】TaskAffinity详解

来源:互联网 发布:office for mac免费吗 编辑:程序博客网 时间:2024/05/18 00:13

介绍

今天在开发过程中,碰到了这样一个现象:“我在旅游商家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的包名后,就能正常返回了。正好今天开发量不是特别重,下午挑了个时间好好研究了一下。

launchMode

1.

任务栈:Activity的任务栈是我们很熟悉的了,它是一种先进后出的结构。当按下back键的时候,栈内Activity会一个一个地出栈,并且调用祺onDestroy()方法。如果任务栈中没有Activity,就把这个任务栈销毁。另外,一个App默认只有一个任务栈,以App包名来命名。

2.

standard:标准模式。每次启动Activity都会创建一个新的Activity实例,并将其压入栈顶,不管这个Activity是否存在。

3.

singleTop:栈顶复用模式。启动Activity时,如果这个Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建。

4.

singleTask:栈内复用模式。启动Activity时,首先确认这个Activity指定的任务栈是否存在,否则创建任务栈。如果任务栈中已经存在这个Activity,那么这个Activity会被调到栈顶,其上的Activity依次弹出。

5.

singleInstance:这种模式的Activity只能单独位于一个任务栈内。

TaskAffinity

主角出现了。TaskAffinity就是指定任务栈的,并且只有在singleTask时才生效。

总结

1.TaskAffinity的作用是指定任务栈,并且只有在singleTask时才有效。

2.正常情况下,启动Activity都会加到当前的任务栈中。




原创粉丝点击