为啥我在退出我的 Activity 时会崩溃?
Posted
技术标签:
【中文标题】为啥我在退出我的 Activity 时会崩溃?【英文标题】:Why am I getting a crash when exiting my Activity?为什么我在退出我的 Activity 时会崩溃? 【发布时间】:2010-11-25 11:53:21 【问题描述】:当我(通过后退按钮)退出 Activity 时,我的应用程序崩溃了。据我所知,这发生在 android 代码库中,而不是我的,但我并不完全相信这一点。
这是来自 adb 的堆栈跟踪:
AndroidRuntime E Uncaught handler: thread main exiting due to uncaught exception
AndroidRuntime E java.lang.RuntimeException: Unable to stop activity MyApp/MyApp.MainActivity: java.lang.NullPointerException
AndroidRuntime E at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3097)
AndroidRuntime E at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3159)
AndroidRuntime E at android.app.ActivityThread.access$2400(ActivityThread.java:112)
AndroidRuntime E at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724)
AndroidRuntime E at android.os.Handler.dispatchMessage(Handler.java:99)
AndroidRuntime E at android.os.Looper.loop(Looper.java:123)
AndroidRuntime E at android.app.ActivityThread.main(ActivityThread.java:3948)
AndroidRuntime E at java.lang.reflect.Method.invokeNative(Native Method)
AndroidRuntime E at java.lang.reflect.Method.invoke(Method.java:521)
AndroidRuntime E at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
AndroidRuntime E at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
AndroidRuntime E at dalvik.system.NativeStart.main(Native Method)
AndroidRuntime E Caused by: java.lang.NullPointerException
AndroidRuntime E at android.app.Activity.performStop(Activity.java:3575)
AndroidRuntime E at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3092)
AndroidRuntime E ... 11 more
有人有什么想法/建议吗?
【问题讨论】:
【参考方案1】:帮不上什么忙,因为没有代码。 还在看
引起:java.lang.NullPointerException at android.app.Activity.performStop(Activity.java:3575)
我刚刚检查了 Activity.java
final int N = mManagedCursors.size();
for (int i=0; i<N; i++)
ManagedCursor mc = mManagedCursors.get(i);
if (!mc.mReleased)
mc.mCursor.deactivate(); // line 3575
mc.mReleased = true;
你确定所有的游标都被正确释放了吗?
【讨论】:
我认为它们应该由 Activity 管理...我在我正在使用的唯一 Cursor 上调用了 startManagingCursor() 。这不应该处理吗? 来自文档:此方法允许活动根据活动的生命周期为您管理给定游标的生命周期。也就是说,当活动停止时,它会自动在给定的光标上调用 deactivate(),当它稍后重新启动时,它会为你调用 requery()。当activity被销毁时,所有托管的Cursor都会自动关闭。 这不正是您发布的代码应该做的吗? 哦等等...我敢打赌光标对象是空的...呃。感谢您为我指明正确的方向。 是的,就是这样。它没有“绑定”到 null 的问题,但是当它试图释放它时,它抛出了一个异常。谢谢。【参考方案2】:很好地解释了在这种情况下内部发生的事情:http://www.jjoe64.com/2011/06/how-to-fix-activityperformstop.html
【讨论】:
【参考方案3】:在调用 startManagingCursor() 方法之前的 Activity 中,您的 Cursor 为空。不要让光标为空。
【讨论】:
以上是关于为啥我在退出我的 Activity 时会崩溃?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Flutter 应用在 iOS 上启动时会崩溃?