Android使用Activity Result API选PDF按返回键App直接关闭如何解决
问题原因排查方向
- 空指针异常:用户在文件选择页取消选择(按返回键)时,
ActivityResultCallback回调返回的Uri为null,如果后续处理逻辑没有做空判断直接调用Uri相关方法,会触发NullPointerException导致应用闪退关闭。 - 生命周期逻辑异常:检查当前页面
Activity的onPause/onStop等生命周期方法,是否写了不必要的finish()逻辑,唤起文件选择器时当前Activity会进入暂停状态,若此时执行了finish(),返回时页面就会被直接关闭。 - Manifest配置错误:如果当前
Activity在AndroidManifest.xml中配置了android:noHistory="true"属性,页面离开前台后就会被系统自动销毁,从文件选择页返回时就会直接退出应用。
对应解决方案
- 首先在回调中添加空判断,处理取消选择的场景,修改后的代码如下:
ActivityResultLauncher<String> mGetContent = registerForActivityResult(new GetContent(), new ActivityResultCallback<Uri>() { @Override public void onActivityResult(Uri uri) { // 先判断Uri是否为空,为空代表用户取消选择,直接返回 if (uri == null) { return; } // 后续正常处理返回的Uri } }); @Override public void onCreate(@Nullable Bundle savedInstanceState) { // ... Button selectButton = findViewById(R.id.select_button); selectButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mGetContent.launch("application/pdf"); } }); }
- 检查当前
Activity的生命周期回调,移除onPause、onStop中非必要的finish()调用,若确实需要调用finish()请补充场景判断,避免唤起第三方页面时误销毁当前页面。 - 打开
AndroidManifest.xml,找到对应Activity的配置,将android:noHistory属性改为false,无特殊需求的话launchMode使用默认的standard即可。 - 可以通过Logcat查看闪退时的异常堆栈,能直接定位到具体的报错代码行,快速定位问题。
内容的提问来源于stack exchange,提问作者Real Tech Hacks
相关产品推荐
相关产品推荐

