startActivityForResult
是 Android 中用于从一个 Activity 启动另一个 Activity,并在结果返回时获取结果数据的方法。这种回调机制基于 Android 的 Activity 生命周期和启动模式实现。
以下是 startActivityForResult
的回调机制解析:
在启动新 Activity 之前,当前 Activity(我们称之为 A)会调用
startActivityForResult
方法。这个方法接收两个参数:一个 Intent 对象,用于描述要启动的新 Activity(我们称之为 B);一个请求码(requestCode),用于标识这次请求。系统会根据 Intent 创建新 Activity B,并将其添加到任务栈中。此时,Activity A 仍然处于暂停状态。
在新 Activity B 中,可以通过调用
setResult
方法设置结果数据。这个方法接收两个参数:一个结果码(resultCode),表示操作的成功与否;一个 Intent 对象,用于传递结果数据。当新 Activity B 完成操作并准备返回结果时,需要调用
finish
方法来关闭自身。这将导致 Activity B 从任务栈中移除,并回到上一个 Activity A。在 Activity A 中,
onActivityResult
方法会被调用。这个方法接收三个参数:请求码(requestCode)、结果码(resultCode)和包含结果数据的 Intent 对象。通过这个方法,Activity A 可以获取 Activity B 的结果数据,并根据需要进行相应的处理。如果 Activity A 被销毁或重新创建(例如,由于配置更改或内存不足),系统会保留请求码和结果数据,以便在 Activity A 重新创建后能够正确地调用
onActivityResult
方法。
总结一下,startActivityForResult
的回调机制依赖于 Android 的 Activity 生命周期和任务栈管理。通过在启动新 Activity 时传递请求码和结果数据,系统可以确保在适当的时机调用 onActivityResult
方法,并将结果数据传递给调用者。这种机制使得在多个 Activity 之间传递数据和处理操作结果变得简单高效。