我正在开发一款通过蓝牙录制数据的应用,但它会在收集数据后间歇性地崩溃(很难找到错误)。
logcat输出不是很有帮助:
没有抛出异常,也没有任何线索导致该进程被终止。
我怎样才能弄清楚出了什么问题?是否有抛出的异常没有被logcat显示?我该如何追踪这个错误?
答案 0 :(得分:11)
信号9是SIGKILL,它将立即终止进程(进程内的处理程序不会运行)。从日志行开始,进程将自行查找,因此它不是发出SIGKILL的外部代理。
我的猜测(实际上是猜测)是在你的进程中运行的内存管理代码(作为基础结构的一部分,而不是你编写的代码)决定你已经耗尽了一些资源,唯一的办法就是死。我希望在日志中达到此点之前会有更多消息,因此可能值得浏览日志历史记录,以查看此时此过程中是否存在有用的警告。
紧接此之前的行是GC日志,这意味着某种内存资源正在运行。但看起来堆不够,所以分配失败似乎不太可能。如果分配的对象太大而无法容纳在堆上,或者碎片阻止分配它,您仍然可以获得分配失败。不过,在这种情况下,我希望看到更多相关的日志消息。
我认为捕获更多日志(如果需要,可能通过应用程序的PID过滤它)将有助于您取得进展。
答案 1 :(得分:4)
就我而言,日志中没有任何警告或任何线索。
最终我发现我的问题是我要进行的其中一项活动(比如活动X)正在注册广播接收器,但从未注销过它。
因此,通过关闭活动(活动X)并返回它导致将再次注册到同一个广播接收器 - 这导致了混乱!
简单地添加unregisterReceiver(mybroadcast);
(在活动X中)解决了它
(我将我的内容添加到了onDestroy中。请确保在right location中取消注册。
如果您非常绝望,我建议您查看此幻灯片分享,以解释Android crash debugging您的错误。
答案 2 :(得分:0)
在使用RXjava而不实现onError
回调方法时会发生此问题