registerForActivityResult和startActivityForResult区别是什么
时间: 2024-01-09 14:56:06 浏览: 30
registerForActivityResult和startActivityForResult是Android开发中用于处理启动Activity并接收结果的两种机制。
1. startActivityForResult是一种旧的机制,它需要在Activity中使用startActivityForResult方法启动另一个Activity,并在目标Activity结束后返回结果。然后,在启动Activity的源Activity中,通过重写onActivityResult方法来处理返回的结果。这个过程包括启动目标Activity、等待用户操作或其他事件的完成,然后接收和处理结果。这种机制适用于较早版本的Android开发。
示例代码如下:
```java
// 在源Activity中启动目标Activity
Intent intent = new Intent(this, TargetActivity.class);
startActivityForResult(intent, REQUEST_CODE);
// 在源Activity中处理返回结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// 处理返回的结果
}
}
}
```
2. registerForActivityResult是一种新的机制,它是在Android Jetpack库中添加的。这个机制更加灵活和易用。你可以使用registerForActivityResult方法在Fragment或Activity中注册一个ActivityResultLauncher,并定义启动目标Activity的逻辑、接收和处理结果的逻辑。你可以直接定义一个回调函数来处理结果,而不需要重写onActivityResult方法。
示例代码如下:
```java
// 在Fragment或Activity中注册ActivityResultLauncher
ActivityResultLauncher<Intent> launcher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == RESULT_OK) {
// 处理返回的结果
}
}
);
// 在Fragment或Activity中启动目标Activity
Intent intent = new Intent(getActivity(), TargetActivity.class);
launcher.launch(intent);
```
总结:
- startActivityForResult是旧的机制,需要在源Activity中重写onActivityResult方法来处理返回的结果。
- registerForActivityResult是新的机制,使用ActivityResultLauncher来注册启动目标Activity并处理结果,更加灵活和易用。