【发布时间】:2012-07-10 09:08:39
【问题描述】:
我正在开发一个通过蓝牙记录数据的应用程序,但在收集数据数小时后它会间歇性崩溃(因此很难找到错误)。
logcat 输出不是很有帮助:
没有抛出异常,也没有任何线索说明导致进程终止的原因。
如何找出问题所在?是否抛出了 logcat 未显示的异常?我怎样才能找到这个错误?
【问题讨论】:
标签: android
我正在开发一个通过蓝牙记录数据的应用程序,但在收集数据数小时后它会间歇性崩溃(因此很难找到错误)。
logcat 输出不是很有帮助:
没有抛出异常,也没有任何线索说明导致进程终止的原因。
如何找出问题所在?是否抛出了 logcat 未显示的异常?我怎样才能找到这个错误?
【问题讨论】:
标签: android
信号 9 是 SIGKILL,它将立即终止一个进程(进程内不会运行任何处理程序)。从日志行来看,进程正在杀死自己,因此它不是发出 SIGKILL 的外部代理。
我的猜测(确实是猜测)是在您的进程中运行的内存管理代码(作为基础架构的一部分,而不是您编写的代码)决定您已经耗尽了一些资源,唯一的办法是死。我希望在日志中达到这一点之前会有更多消息,因此可能值得浏览日志历史记录以查看在此之前的进程是否有有用的警告。
紧接在此之前的行是 GC 日志,这意味着某种内存资源正在运行不足。但看起来堆没有满,所以分配失败似乎不太可能。如果正在分配的对象太大而无法放入堆中,或者碎片阻止它被分配,您仍然可能会遇到分配失败。不过,我希望在这种情况下看到更多相关的日志消息。
我认为捕获更多日志(如果需要,可能通过应用的 PID 过滤)将帮助您取得进展。
【讨论】:
就我而言,日志中没有警告或任何线索。
最终我发现我的问题是我要进入的活动之一
(比如说活动 X)正在注册到广播接收器,但从未取消注册。
因此,通过关闭活动(活动 X)并返回它导致向同一广播接收器注册再次 - 这导致了混乱!
只需添加unregisterReceiver(mybroadcast);(在活动 X 中)即可解决。
(我将我的添加到 onDestroy。确保您在 right location 中取消注册)。
如果你非常绝望,我建议你看这张幻灯片分享,它解释了Android crash debugging你的错误。
【讨论】:
这个问题发生在使用RXjava并且没有实现onError回调方法时
【讨论】: