Android中带noHistory的LiveChat Activity打开文件选择器被销毁的解决求助
解决办法
放弃在Manifest中设置
android:noHistory="true",改用代码手动控制Activity的销毁时机
因为Manifest里的noHistory是全局强制规则,运行时修改Intent标志根本绕不开它。你可以把原来的自动销毁逻辑用代码实现,精准避开文件选择器的场景:- 删掉LiveChat Activity的
android:noHistory="true"属性 - 在LiveChat里加个布尔标记,比如
private boolean isOpeningFilePicker = false; - 启动文件选择器前,先把这个标记设为
true:isOpeningFilePicker = true; Intent pickerIntent = new Intent(Intent.ACTION_GET_CONTENT); pickerIntent.setType("image/* video/*"); startActivityForResult(pickerIntent, PICK_FILE_REQUEST_CODE); - 重写
onPause()方法,只有当不是打开文件选择器的情况,才销毁Activity:@Override protected void onPause() { super.onPause(); if (!isOpeningFilePicker) { finish(); } // 用完就重置标记,避免影响后续逻辑 isOpeningFilePicker = false; } - 在文件选择器的结果回调里处理选中的文件,这时候Activity已经回到前台,后续再切后台会正常销毁,完全符合原来
noHistory的需求,同时打开文件选择器时不会被销毁。
- 删掉LiveChat Activity的
如果你不想修改Manifest的
noHistory设置,还有个曲线救国的方案:
写一个透明的中转Activity,这个Activity不设noHistory,当LiveChat要打开文件选择器时,先启动这个中转Activity,再由中转Activity启动文件选择器,同时把LiveChat的上下文传过去。中转Activity在启动文件选择器后立刻finish,文件选择器的结果可以通过回调转发给LiveChat。不过这个方案要多写一个Activity,逻辑更绕,不如第一个方案清爽。
内容的提问来源于stack exchange,提问作者Amit Yadav
相关产品推荐
相关产品推荐

