Android 14(API 34)Activity返回栈行为异常原因咨询
Android 14(API 34)Activity返回流程异常的根因解析
问题背景
此前在Android 13中正常的Activity跳转流程A→B→C,升级到Android 14后,从C返回时不再回到A,而是停留在B。已知在Activity B启动C时添加finish()可解决问题,但需明确系统变更导致的根因。
导致问题的Android 14核心变更
这是Android 14对隐式广播接收器的限制强化所引发的:
- 在Android 13及更早版本中,静态注册的广播接收器即使未显式设置
android:exported属性,也能接收自定义隐式广播(如你代码中action="FINISH"的广播)。因此C发送广播后,B的接收器能收到并执行finish(),任务栈变为A→C,C销毁后自然回到A。 - 但Android 14严格要求:静态注册的广播接收器若要接收隐式广播,必须显式设置
android:exported="true";若设置为false,则仅能接收应用内部的显式广播或系统白名单内的广播。你提到适配Android 14时修改了广播接收器的export属性,大概率是设置为false,导致B的接收器无法收到C发送的隐式广播,B未被销毁,任务栈仍为A→B→C,C销毁后就回到B。
代码逻辑验证
从你提供的代码来看:
- Activity B启动C的代码仅执行了
startActivity(),未主动销毁自己; - Activity C通过发送
action="FINISH"的隐式广播通知B销毁,再自行finish()。
在Android 14中,由于广播接收器的export属性限制,这个通知逻辑失效,B保留在任务栈中,最终导致返回流程变化。
内容的提问来源于stack exchange,提问作者tiredqa_18
相关产品推荐
相关产品推荐

