FLAG_ACTIVITY_SINGLE_TOP未覆盖singleTask的实验异常技术问询
Android启动模式Intent标记与清单配置的优先级验证问题
我查阅了Android官方启动模式文档,其中提到:
若Activity A启动Activity B,Activity B可在清单文件中定义其与当前任务的关联方式,Activity A也可通过Intent请求该关联方式。若两者均定义,则优先遵循Activity A的Intent请求。
为验证该规则,我开展了如下实验:
创建两个Activity:MainActivity(启动页)和Activity2,清单配置如下:
<activity android:name=".Activity2" android:exported="false" android:launchMode="singleTask" android:taskAffinity="com.affin_1"/> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
注意Activity2显式配置了不同于默认值的taskAffinity,且启动模式为singleTask。
在MainActivity的onCreate()中启动Activity2,其按预期在新任务中启动,此时存在两个独立任务:
- 任务1:包含MainActivity
- 任务2:包含Activity2
随后在MainActivity中添加按钮,点击时通过如下代码启动Activity2:
button.setOnClickListener { startActivity(Intent(this, Activity2::class.java) .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)) }
我为Intent设置了Intent.FLAG_ACTIVITY_SINGLE_TOP启动标记,预期该标记会覆盖清单中声明的singleTask启动模式,在MainActivity所在任务中创建新的Activity2实例,最终形成两个任务:
- 任务1:MainActivity -> Activity2
- 任务2:Activity2
但实际结果不符,系统将Intent路由至任务2中已存在的Activity2实例,未按预期覆盖singleTask启动模式。
内容的提问来源于stack exchange,提问作者Manish Kumar Sharma
相关产品推荐
相关产品推荐

