if (requestCode == SOME_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
if (data != null) {
String value = data.getStringExtra("key");
// 在这里处理传递过来的信息
}
}
}
复制代码
活动 B
Intent resultIntent = new Intent();
resultIntent.putExtra("key", value);
setResult(Activity.RESULT_OK, resultIntent);
复制代码
可以看出,在这个过程中,请求码 才是须要的参数,因为活动 A 有可能在不同环境下启动不同的活动,所以需要标志究竟是哪个活动返回到 A 的。而 返回码 只是一种安卓额外提供的对回传数据的分类,这个参数现实上不是须要的,因为回传数据内部本身就可以自行分类。另外,此值固定设置为 int 类型也非常不合理。
不仅云云,onActivityResult 直接作为 Activity 的重载方法,耦合度过大。onActivityResult 会直接接受全部活动的回传业务,这是非常不合适的。正确的计划方案应该是让每一个返回至活动 A 的活动单独在一个方法中处理回传业务,如许不同的活动之间就可以非侵入解耦,而不是将它们集中在一起同一管理。
可以看出,onActivityResult 的计划实在确实是有许多问题的,只不过这个 API 过于古老,所以广泛用了很久。
registerForActivityResult 有哪些改进
java.lang.IllegalStateException: LifecycleOwner XXX is attempting to register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.
at androidx.activity.result.ActivityResultRegistry.register(ActivityResultRegistry.java:123)
at androidx.activity.ComponentActivity.registerForActivityResult(ComponentActivity.java:833)
at androidx.activity.ComponentActivity.registerForActivityResult(ComponentActivity.java:842)