handleStopActivity 中的 NullPointerException -- 在堆栈跟踪中没有引用我的代码
Posted
技术标签:
【中文标题】handleStopActivity 中的 NullPointerException -- 在堆栈跟踪中没有引用我的代码【英文标题】:NullPointerException in handleStopActivity -- No reference to my code in stack trace 【发布时间】:2011-03-31 15:24:49 【问题描述】:在这里,我有点不知所措。我在handleStopActivity
中看到了越来越多的NullPointerException
s。我怀疑随着 2.2 对 Droid 所有者的升级增加,这种增加会同时发生,尽管这只是一个猜测。我自己从未见过崩溃,市场提供的堆栈跟踪没有提及我编写的任何类。因此,我不知道从哪里开始解决问题。
java.lang.NullPointerException
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3674)
at android.app.ActivityThread.access$2600(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2153)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
由于不知道原因,也不知道该提供哪些信息来辅助诊断,所以我先来概述一下: 我的应用是 WootWatcher。它跟踪 Woot.com 并通知用户有新的待售商品。它通过在单独进程中运行的服务来实现这一点。服务和主活动通过aidl接口和回调相互通信。我还在服务和活动中使用消息处理程序,并经常为昂贵的任务生成线程。
【问题讨论】:
我运行 droid(仍然没有 2.2 更新,等待中...)如果我看到任何奇怪的东西,我会告诉你。 好吧,我今天收到了 2.2 更新,并在应用程序上玩了一些。我认为没有问题。 @Ben Tobin 你有停止活动的代码吗? 您是否尝试过调试应用程序并找到发生此崩溃的位置? 你能贴出处理handleStopActivity
的代码吗?
【参考方案1】:
回顾这个 4 年前的问题,我意识到我应该能够诊断它,但不幸的是,我找不到与这些行匹配的任何 AOSP 版本。 Droid 一定使用了一些未提供的源代码的更改版本。
也就是说,Froyo 的handleStopActivity()
没有太多机会出现空指针异常。当活动已经停止或正在停止时,最有可能指向Activity.finish()
。
这通常发生在您注册最终调用 finish()
的侦听器并且您没有在 onPause()
中取消注册这些侦听器时。
【讨论】:
【参考方案2】:我不知道,如果您仍在寻找解决方案,但这是我发现的。如果您找到了真正的解决方案,请告诉我。
我只是遇到了同样的问题.. 我从来没有遇到过这个问题,而且在不更改代码的情况下,它出现是出于某种原因。通过使用谷歌,我找到了约瑟夫发布的问题,但这似乎并不完全相同。我还找到了this 和this。这两个似乎有相同的问题,但没有解决方案.. 然后我找到了this blog。
作者讲述了它的来源 - Android 中的一个错误。此外,它与Cursor
有关。这并没有解决我的问题,但我注意到,我在调用startActivity(someIntent);
之前使用了几行Cursor
(我也调用了finish()
,但删除该行并没有什么不同)。
我试图删除包含Cursor
的行,但它突然又可以工作了..
我不知道为什么它有效,但它确实有效。我刚刚将带有Cursor
的代码移到了我的另一个Activity
。
这绝对不是一个好的解决方案,但它对我有用。
还有一个问题:你甚至使用Cursor
并调用startActivity(..)
或类似的东西吗?
编辑:
我刚刚发现,我没有解决问题,我只是没有进行足够的测试。我开始的Activity
运行良好,直到我想用我之前开始的Activity
创建下一个Activity
。在启动下一个Activity
时,我的应用再次崩溃。
【讨论】:
【参考方案3】:参考这个问题的答案。看起来像一个已知问题,也有解决方案。 希望对你有帮助……
NullPointerException on onSaveInstanceState with AndroidFragments
【讨论】:
可能有关系,但这个问题早于 Fragments。【参考方案4】:向 Android 项目报告错误如何(要求检查是否有其他人报告)?如果堆栈跟踪中没有来自 You 的代码,则表明框架中存在错误。虽然可能在你的其他代码中你打破了例如不言而喻的合同/假设。
【讨论】:
请将您的答案合并为一个答案。 这些答案代表了不同的方法——为什么要合并它们? @KarolDepka 您可以在其中创建标题,但将其作为单一答案更适合 ***。【参考方案5】:也许尝试将方法 handleStopActivity 包装在 try-catch 块中并自己处理错误,为自己提供更多详细信息并防止“强制关闭”?
【讨论】:
@BenTobin 您可以查看 ActivityThread.java:3674 上的内容,它有时会给出提示。 Play 商店的错误报告是否提及 Android 版本?以上是关于handleStopActivity 中的 NullPointerException -- 在堆栈跟踪中没有引用我的代码的主要内容,如果未能解决你的问题,请参考以下文章
列值采用 0 或 nul 代替 HIVE 中的 char 数据类型
为啥 environment.getProperty("spring.profiles.active") 在使用 @ActiveProfiles 激活测试中的配置文件时返回 nul