返回

突破 Android 复杂启动流程 - 深入了解 ActivityResult API

Android

Android 开发中的启动模式

在开始探讨 ActivityResult API 之前,我们首先需要了解 Android 中的启动模式。启动模式决定了新启动的活动如何与现有活动堆栈进行交互。Android 中有四种常见的启动模式:

  • standard :这是默认的启动模式,新启动的活动将被压入活动堆栈的顶部。
  • singleTop :如果当前活动堆栈中已经存在一个与新启动活动相同的活动实例,则新启动的活动将不会被创建,而是将被重新启动。
  • singleTask :如果当前活动堆栈中已经存在一个与新启动活动相同的活动实例,则新启动的活动将被启动,但堆栈中除该活动实例之外的其他活动将被销毁。
  • singleInstance :新启动的活动将始终创建新实例,并将其放入新的任务栈中。

ActivityResult API 简介

ActivityResult API 允许您从一个活动启动另一个活动并接收结果。这通常用于允许用户选择或输入数据,然后将结果返回给调用活动。

要使用 ActivityResult API,您需要在启动活动时使用 startActivityForResult() 方法。此方法需要两个参数:一个是要启动的活动类的 Intent 对象,另一个是请求代码。请求代码用于标识启动的活动,以便在活动返回时能够正确处理结果。

在启动的活动中,您可以在 onActivityResult() 方法中处理结果。此方法将在活动返回时被调用,它具有三个参数:请求代码、结果代码和一个 Intent 对象,该对象包含从活动返回的数据。

使用 ActivityResult API

以下是一个使用 ActivityResult API 的示例:

// 在调用活动中
Intent intent = new Intent(this, ResultActivity.class);
startActivityForResult(intent, REQUEST_CODE);

// 在结果活动中
Intent data = new Intent();
data.putExtra("result", "This is the result");
setResult(RESULT_OK, data);
finish();

// 在调用活动中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
    String result = data.getStringExtra("result");
    // 处理结果
  }
}

在上面的示例中,调用活动启动了一个 ResultActivity,并使用请求代码 REQUEST_CODE。在 ResultActivity 中,我们使用 setResult() 方法设置结果代码和数据,然后关闭活动。在调用活动中,我们使用 onActivityResult() 方法处理结果。

ActivityResult API 的高级用法

ActivityResult API 还有许多高级用法,例如:

  • 使用 FLAG_ACTIVITY_NEW_TASK 启动新活动
  • 使用 FLAG_ACTIVITY_CLEAR_TASK 清除活动堆栈
  • 使用 startActivityForResult()options 参数自定义启动行为

这些高级用法可以帮助您创建更灵活和强大的 Android 应用。

结论

ActivityResult API 是 Android 开发中一个非常有用的工具,它可以帮助您构建更强大的应用。通过理解启动模式和 ActivityResult API 的工作原理,您将能够创建更复杂和用户友好的 Android 应用。