📜  替换 startactivityforresult (1)

📅  最后修改于: 2023-12-03 15:10:33.964000             🧑  作者: Mango

替换 startActivityForResult

在 Android 开发中,startActivityForResult 是常用的方法之一,它可以启动一个新的 Activity 并返回结果。然而,从 Android 10 开始,Google 引入了一种新的启动方式,即 registerForActivityResult,它可以替换 startActivityForResult 的使用。

为什么要替换 startActivityForResult?

根据 Android 官方文档介绍,startActivityForResult 在 Android 11 中已被废弃,官方推荐使用新的启动方式 registerForActivityResult。这是因为 startActivityForResult 在使用过程中存在以下问题:

  1. 它的使用方式较为繁琐,需要在当前 Activity 中重写 onActivityResult 方法,才能处理启动的 Activity 返回的结果。
  2. requestCode 作为标识符的方式,可能会造成命名不规范、冲突等问题。
  3. 它无法处理跨进程的场景。
如何替换 startActivityForResult?

使用 registerForActivityResult 替换 startActivityForResult 非常简单,下面是一个具体的例子:

private ActivityResultLauncher<Intent> mStartForResult =
        registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
                new ActivityResultCallback<ActivityResult>() {
                    @Override
                    public void onActivityResult(ActivityResult result) {
                        if (result.getResultCode() == RESULT_OK) {
                            Intent data = result.getData();
                            // 处理返回结果
                        }
                    }
                });

// 启动 Activity 并获取返回结果
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
mStartForResult.launch(intent);

我们可以发现,registerForActivityResult 的使用方式比 startActivityForResult 更加简单明了,同时它还可以通过泛型参数指定输入和输出类型,让代码更加类型安全。

总结

registerForActivityResult 的推出不仅简化了启动和接收 Activity 返回值的操作,而且解决了一些使用 startActivityForResult 存在的问题。因此,我们应该尽早使用 registerForActivityResult 替换 startActivityForResult,提高代码质量、提升开发效率。