【发布时间】:2023-03-18 05:54:01
【问题描述】:
这个崩溃已经在我的开发者控制台中出现了很长时间,我无法以任何方式重现它。
我有一个以 MainActivity 开头的应用。在 onCreate 中,一些数据是从后端异步下载的。在此活动中按下按钮时,会打开一个对话框,其中显示一些从服务器下载的数据。
这是崩溃:
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.******.******/com.******.******.MainActivity}: com.******.******.users.UserData$DataNotFoundException: Requested element not found
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6942)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by com.******.******.users.UserData$DataNotFoundException: Requested element not found
at com.******.******.users.UserData.getData(UserData.java:478)
at com.******.******.UserDialog.onCreateDialog(UserDialog.java:87)
at androidx.fragment.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:380)
at androidx.fragment.app.Fragment.performGetLayoutInflater(Fragment.java:1412)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2659)
at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManagerImpl.java:2613)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:246)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:542)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1341)
at android.app.Activity.performStart(Activity.java:7200)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2920)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6942)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
让我感到困惑的是,由于对话框膨胀时发生崩溃,因此在 performLaunchActivity 中发生了崩溃。但是,该对话框不是在 Activity 的 onCreate 中创建的,而是在用户按下按钮后创建的。然而,该按钮没有被点击(我在点击监听器中添加了一个日志,它从未被调用)。
我在 GitHub 问题跟踪器中看到了类似模式的崩溃,但没有回复,所以这似乎是一种常见的模式,但很难调试。
问题是在什么情况下可以从 performLaunchActivity 实例化 Dialog,即使 onCreate() 方法中没有对对话框的引用。我猜它与活动的生命周期有关,但我无法破解它。
【问题讨论】:
-
请分享您的代码。如果有任何帮助,请检查this。
-
我无法分享我的所有代码。我认为帖子中有足够的信息。
-
我知道规则。我不是想找人调试我的代码,问题是在什么情况下,活动在启动时可能会因为不应打开的对话框而崩溃。
-
@ig343 可以分享 UserData java 文件吗
-
@ig343 你是否在 onResume 或 onStart 方法中定义了对话框?
标签: android android-layout android-activity android-lifecycle android-dialog