You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android使用Activity Result API选PDF按返回键App直接关闭如何解决

问题原因排查方向

  • 空指针异常:用户在文件选择页取消选择(按返回键)时,ActivityResultCallback回调返回的Uri为null,如果后续处理逻辑没有做空判断直接调用Uri相关方法,会触发NullPointerException导致应用闪退关闭。
  • 生命周期逻辑异常:检查当前页面Activity的onPause/onStop等生命周期方法,是否写了不必要的finish()逻辑,唤起文件选择器时当前Activity会进入暂停状态,若此时执行了finish(),返回时页面就会被直接关闭。
  • Manifest配置错误:如果当前Activity在AndroidManifest.xml中配置了android:noHistory="true"属性,页面离开前台后就会被系统自动销毁,从文件选择页返回时就会直接退出应用。

对应解决方案

  1. 首先在回调中添加空判断,处理取消选择的场景,修改后的代码如下:
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");
        }
    });
}
  1. 检查当前Activity的生命周期回调,移除onPause、onStop中非必要的finish()调用,若确实需要调用finish()请补充场景判断,避免唤起第三方页面时误销毁当前页面。
  2. 打开AndroidManifest.xml,找到对应Activity的配置,将android:noHistory属性改为false,无特殊需求的话launchMode使用默认的standard即可。
  3. 可以通过Logcat查看闪退时的异常堆栈,能直接定位到具体的报错代码行,快速定位问题。

内容的提问来源于stack exchange,提问作者Real Tech Hacks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 11:27:04