registerForActivityResult 使用用途是监听Activity结果。
以下是使用样例
//需要传递Request用于解析Intent和解析上个Activity返回的结果 val launchdata = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { println("it $it") } //传入启动的Activity信息,来启动Activity launchdata.launch(PickVisualMediaRequest(mediaType = ActivityResultContracts.PickVisualMedia.ImageOnly))
实现原理分析:
首先四注册流程
//其中mActivityResultRegistry是final变量
public final ActivityResultLauncher registerForActivityResult(
@NonNull ActivityResultContract contract,
@NonNull ActivityResultCallback callback) {
return registerForActivityResult(contract, mActivityResultRegistry, callback);
}
public final ActivityResultLauncher register(
@NonNull final String key,
@NonNull final LifecycleOwner lifecycleOwner,
@NonNull final ActivityResultContract contract,
@NonNull final ActivityResultCallback callback) {
Lifecycle lifecycle = lifecycleOwner.getLifecycle();
if (lifecycle.getCurrentState().isAtLeast(Lifecycle.State.STARTED)) {
throw new IllegalStateException("LifecycleOwner " + lifecycleOwner + " is "
+ "attempting to register while current state is "
+ lifecycle.getCurrentState() + ". LifecycleOwners must call register before "
+ "they are STARTED.");
}
//将