使用singleTask启动模式的Activity无法完全关闭问题求助
问题根因
当应用未在后台运行时,通过分享唤起的singleTask模式的SecondaryActivity会被系统分配到独立的任务栈中。你调用finish()和finishAffinity()只是清空了该任务栈内的所有Activity,但是系统默认会保留已清空的任务栈的快照在最近任务列表中,就出现了你看到的返回栈无Activity但最近任务仍有快照的问题。
解决方案
方法1:全局屏蔽该类分享任务出现在最近列表(推荐适配你的场景)
直接在AndroidManifest.xml里给SecondaryActivity添加android:excludeFromRecents="true"属性即可,该属性表示该Activity启动的任务不会出现在最近任务列表,不会影响应用主界面的最近任务显示,也不需要修改原有业务代码。
修改后的配置示例:
<activity android:name=".SecondaryActivity" android:launchMode="singleTask" android:exported="true" android:excludeFromRecents="true"> <intent-filter> <action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="*/*" /> </intent-filter> </activity>
方法2:关闭时主动移除当前任务
如果你不需要全局屏蔽该Activity的任务出现在最近列表,只需要在返回关闭时移除,可以使用系统提供的finishAndRemoveTask()方法(API 21及以上支持,目前主流应用的最低兼容版本都满足该要求),该方法会同时销毁Activity、清空当前任务栈、并将对应任务从最近任务列表移除。
修改后的SecondaryActivity代码示例:
class SecondaryActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_secondary) } override fun onBackPressed() { finishAndRemoveTask() } }
如果需要兼容API 21以下版本,可以增加版本判断分支,低版本配合excludeFromRecents属性使用即可。
内容的提问来源于stack exchange,提问作者Jisoo
相关产品推荐
相关产品推荐

