返回

Jetpack 学穿:Activity Results API

Android

一、Activity Results API

Activity Results API 是 Jetpack 提供的一套用于处理 Activity 之间结果交互的工具。它简化了 Activity 之间传递数据的方式,让您无需手动编写繁琐的代码。

二、Activity Results API 的用法

1. 注册 Activity Result

首先,您需要在 Activity 中注册 Activity Result。您可以使用 registerForActivityResult 方法来注册 Activity Result。该方法接受两个参数:

  • ActivityResultLauncher:这是一个用于启动 Activity 的对象。
  • ActivityResultCallback:这是一个用于处理 Activity Result 的回调函数。

例如,以下代码演示了如何注册一个 Activity Result,用于启动一个新的 Activity 并获取其结果:

ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if (result.getResultCode() == RESULT_OK) {
                    // Get the result data from the Intent.
                    Intent data = result.getData();
                }
            }
        });

2. 启动 Activity

要启动一个 Activity 并获取其结果,您可以使用 startActivityForResult 方法。该方法接受两个参数:

  • Intent:要启动的 Activity 的 Intent。
  • requestCode:一个用于标识请求的唯一请求码。

例如,以下代码演示了如何使用 startActivityForResult 方法启动一个新的 Activity:

Intent intent = new Intent(this, NewActivity.class);
startActivityForResult(intent, REQUEST_CODE);

3. 处理 Activity Result

当 Activity 返回结果时,onActivityResult 方法将被调用。您可以在 onActivityResult 方法中处理 Activity Result。

例如,以下代码演示了如何处理 Activity Result:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            // Get the result data from the Intent.
            Intent data = result.getData();
        }
    }
}

三、Activity Results API 的实现原理

Activity Results API 的实现原理并不复杂。它使用了一个叫做 ActivityResultRegistry 的类来管理 Activity Result。

ActivityResultRegistry 类维护了一个 Activity Result 的注册表。当您注册一个 Activity Result 时,ActivityResultRegistry 会将 Activity Result 添加到注册表中。

当您启动一个 Activity 时,ActivityResultRegistry 会将 Activity 的请求码和启动它的 Activity 的 ActivityResultLauncher 关联起来。

当 Activity 返回结果时,ActivityResultRegistry 会将结果传递给相应的 ActivityResultLauncherActivityResultLauncher 然后将结果传递给注册的 ActivityResultCallback

四、结语

Activity Results API 是 Jetpack 提供的一套用于处理 Activity 之间结果交互的工具。它简化了 Activity 之间传递数据的方式,让您无需手动编写繁琐的代码。

掌握 Activity Results API 的用法,可以帮助您轻松构建功能强大的 Android 应用。