为啥我在退出我的 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 时会崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的程序在管理这个 JSON 文件时会崩溃?

为啥我的 Flutter 应用在​​ iOS 上启动时会崩溃?

为啥我的 iOS 应用程序在尝试 presentModalViewController 时会崩溃?

为啥我的 iOS 应用程序在收到推送通知时会崩溃?

为啥我的 .NET 应用程序从网络驱动器运行时会崩溃?

为啥我的链表内容在退出函数时会消失?