有时我会收到此 IllegalStateException,它表示您必须确保在调用 launch() 之前注册 ActivityResultLauncher。但没有方法检查 ActivityResultLauncher 是否已注册。我该如何解决这个问题以及为什么会发生这种情况?另外,不清楚何时调用 unregister() 方法,有例子吗?
注意在
onCreate
方法中注册你的activityResultLauncher,以防止副作用
public class MyActiviy extends AppCompatActivity {
.
.
.
private ActivityResultLauncher<Intent> myLauncher;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//some stuff
// Register your launcher here
myLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
if (result.getResultCode() == RESULT_OK && result.getData() != null) {
Intent data = result.getData();
}
});
findViewById(R.id.myButton).setOnClickListener(v -> {
// call `launch` after user click on button or something like that
Intent intent = new Intent(this, TargetActivity.class);
myLauncher.launch(intent);
});
}
}
参考谷歌文档:
使用 ActivityResultRegistry API 时,强烈建议 使用采用 LifecycleOwner 的 API,作为 LifecycleOwner 当生命周期结束时,自动删除您注册的启动器 被毁了。但是,如果 LifecycleOwner 不可用, 每个 ActivityResultLauncher 类都允许您手动调用 unregister() 作为替代方案。
看一下这里
我在 Playstore 上的所有应用程序上都遇到了同样的错误。经过一些实验,我设法找出解决方案。问题是“当应用程序离开活动时启动器被调用”。为了解决这个错误,我只做了两件事。
第 1 步:在 Activity Destroy 上将启动器指定为 null。
@Override
protected void onDestroy() {
super.onDestroy();
someActivityResultLauncher = null;
}
if(someActivityResultLauncher !=null)
someActivityResultLauncher.launch(consentIntent);
让我解释一下,我的应用程序有 2 个活动。电话号码和验证活动。我有一个接收 OTP 消息并启动的广播 ()。如果广播已收到消息并且用户未进行验证活动。该应用程序会在广播时崩溃。非法状态异常
Exception java.lang.RuntimeException:
at android.app.LoadedApk$ReceiverDispatcher$Args.run (LoadedApk.java:972)
at android.os.Handler.handleCallback (Handler.java:743)
at android.os.Handler.dispatchMessage (Handler.java:95)
at android.os.Looper.loop (Looper.java:150)
at android.app.ActivityThread.main (ActivityThread.java:5621)
at java.lang.reflect.Method.invoke
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:684)
Caused by java.lang.IllegalStateException:
at androidx.activity.result.ActivityResultRegistry$2.launch (ActivityResultRegistry.java:168)
at androidx.activity.result.ActivityResultLauncher.launch (ActivityResultLauncher.java:47)
at com.jazz.pakistani.drama.videos.deikho.Activities.Credentials.VerifyPassword$2.onReceive (VerifyPassword.java:289)
at android.app.LoadedApk$ReceiverDispatcher$Args.run (LoadedApk.java:962)
ActivityResultLauncher
之前,您必须重新初始化
onCreate
或 onStart
内的 launch
。