📅  最后修改于: 2023-12-03 15:10:33.964000             🧑  作者: Mango
在 Android 开发中,startActivityForResult
是常用的方法之一,它可以启动一个新的 Activity 并返回结果。然而,从 Android 10 开始,Google 引入了一种新的启动方式,即 registerForActivityResult
,它可以替换 startActivityForResult
的使用。
根据 Android 官方文档介绍,startActivityForResult
在 Android 11 中已被废弃,官方推荐使用新的启动方式 registerForActivityResult
。这是因为 startActivityForResult
在使用过程中存在以下问题:
onActivityResult
方法,才能处理启动的 Activity 返回的结果。requestCode
作为标识符的方式,可能会造成命名不规范、冲突等问题。使用 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
,提高代码质量、提升开发效率。