当前位置: 首页 > 知识库问答 >
问题:

应用程序以“发送信号”终止,但没有例外或其他信息

邬楚青
2023-03-14

我正在开发一款通过蓝牙记录数据的应用程序,但在收集数据数小时后,它会间歇性崩溃(这使得追踪错误变得很困难)。

logcat 输出不是很有帮助:

http://i.imgur.com/EalnX.png

没有引发异常,也没有导致进程终止的线索。

我怎样才能弄清楚哪里出了问题?是否存在未由 logcat 显示的异常?如何跟踪此错误?

共有3个答案

卢景澄
2023-03-14

使用RXjava而不实现onError回调方法时会出现此问题

颜文康
2023-03-14

就我而言,日志中没有警告或任何线索。

最终,我发现我的问题是,我正在参加的其中一项活动
(比如活动X)正在注册到广播接收器,但从未从中注销。

因此,通过关闭活动(活动X)并返回它导致再次注册到同一广播接收器 - 这导致了混乱!

只需添加取消注册接收器(mybroadcast) (在活动X中)解决了它
(我在onDestroy中添加了我的。请确保在正确的位置注销)。

如果你超级绝望,我建议你看看这张幻灯片分享,它解释了Android崩溃调试你的错误。

淳于典
2023-03-14

信号9是SIGKILL,它将立即终止进程(进程内的任何处理程序都不会运行)。从日志行来看,进程正在杀死自己,因此发出SIGKILL的不是外部代理。

我的猜测(实际上是猜测)是在您的进程中运行的内存管理代码(作为基础架构的一部分,而不是您编写的代码)决定您已经耗尽了一些资源,唯一的办法就是死亡。我预计在日志中达到这一点之前会有更多消息,因此可能值得浏览日志历史记录,看看在此之前是否有来自进程的有用警告。

紧接在此之前的行是GC日志,这意味着某种内存资源正在耗尽。但看起来堆没有满,因此分配失败似乎不太可能。如果分配的对象太大而无法在堆中容纳,或者碎片阻止了它的分配,您仍然可以获得分配失败。不过,我希望在这种情况下看到更多相关的日志消息。

我认为捕捉更多的日志(如果有必要的话,也许可以通过你的应用程序的PID过滤)会帮助你取得进步。

 类似资料:
  • 问题内容: 我正在通过Go启动一个简单的Java应用程序,目的是证明Go可以发送诸如SIGQUIT或SIGTERM之类的信号,而Java可以捕获并适当地处理它(即正常关闭)。当我在命令行上运行Java程序并将其发送给CTRL + C时,Java程序正确捕获了信号。 但是,当我通过Go启动Java程序并尝试向进程发送信号时,Java进程既不会终止也不会处理信号。唯一起作用的是SIGKILL,它当然不

  • #include <stdio.h> #include <signal.h> void handler(int sig); void handler(int sig) { signal(sig, handler); printf("Receive signal: %d\n", sig); } int main(void) { signal(SI

  • 问题内容: 在POSIX系统上,终止信号通常具有以下顺序(根据许多MAN页和POSIX规范): SIGTERM-礼貌地要求进程终止。它应正常终止,清理所有资源(文件,套接字,子进程等),删除临时文件等。 SIGQUIT-更有力的要求。它会终止不合时宜的情况,仍然清理绝对需要清理的资源,但可能不会删除临时文件,可能会在某些地方写入调试信息;在某些系统上,还将写入核心转储(无论信号是否被应用捕获)。

  • 我正在开发跨平台的Unity应用程序。大约一个月前,我在Android和iOS上测试了应用程序,它们可以正确旋转。但现在Android应用程序没有旋转。但iOS应用程序仍然完美地旋转。 当我旋转移动设备时,我会在Android Monitor中收到下一条消息: 我试图覆盖活动的<code>onConfigurationChanged(),就像这里一样,但它在手机旋转时不会调用,所以它会更早停止。

  • 问题内容: 我正在尝试在docker容器中运行用golang编写的服务器。例如: 如果我在本地计算机上运行此代码,则可以将其发送给with ,它将关闭应用程序。当我在docker容器中运行它时,我似乎无法使用杀死它。 然后,我继续使用docker向容器发送信号。 仍在运行… 仍在运行… 终于死了。 我没有在代码中捕获任何信号并忽略它们。我什至尝试增强上面的代码以捕获信号并将其打印出来(这在我的主机

  • 我创建了基于JAVA SWT的GUI,它可以与外部C可执行文件进行交互。我的GUI使用ProcessBuilder调用这个c进程。在C进程可执行文件中,我重载了信号函数(CTRL C,CTRL D)。我的问题是如何从JavaSWTGUI向这个外部C进程发送CTRL C?我试过了。getRuntime()。链接中提供了exec((kill SIGINT pid):“如何将SIGINT信号从Java发