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

在本机信号处理期间从JNI进行Java调用

顾单弓
2023-03-14

我实现了一个自定义POSIX信号处理程序参考:http://blog.httrack.com/blog/2013/08/23/catching-posix-signals-on-android/

它们似乎是艺术的平台限制。

通过信号处理程序方法从JNI调用java方法,是否有变通方法或任何其他实现方法。

如果没有,那么是否有替代方案来捕获本机崩溃并传播到应用程序?

共有1个答案

习阳
2023-03-14

首先——你应该非常小心地在信号处理程序中做什么。还有一个你可以从那里安全调用的函数列表,寻找“异步信号安全函数”。当然,你不应该通过JNIEnv调用该列表之外的任何东西或任何东西,因为你不知道JVM在幕后做什么。

因此,无法将错误传播到应用程序。您可以使用write()将任何需要的内容写入某个文件,然后在下次启动时测试该文件。

 类似资料:
  • 我的项目在android系统中使用了一个捕获崩溃并发送的模块。当处理本机崩溃时,本机代码会做一些事情,然后从JNI进行java调用。它在Dalvik上运行良好。但在使用ART的android以上版本中就失效了,因为ART在原生信号处理过程中阻止了任何来自JNI的Java调用。上面说ART信号处理使用交替信号栈,所以在信号处理过程中,不能调用java方法?还有其他方法吗??< br >流量:< br

  • 问题内容: 是否可以在Java虚拟机中处理POSIX信号? 至少SIGINT和SIGKILL应该完全独立于平台。 问题答案: JVM自行响应信号。有些会导致JVM正常关闭,其中包括运行关闭挂钩。其他信号将导致JVM在不运行关闭钩子的情况下中止。 关闭挂钩是使用Runtime.addShutdownHook(Thread)添加的。 我认为JDK没有提供处理Java应用程序中信号的正式方法。但是,我确

  • 我的目标是从内核向运行在接收到这个信号userspace.On的Android服务发送一个信号,该服务应该向内核发出一个IOCTL调用。通过这个ioctl调用从内核获取数据后,它必须显示给用户。为此,我从我的Java服务调用一个本机方法,它注册了sigaction结构,其中包括该信号的处理函数。这个处理函数将进行IOCTL调用并调用一个Java函数将字符串传递给Java服务。 这里是signal.

  • 问题内容: 我有一个独立的应用程序,在该应用程序中,我必须用确认对话框提示用户,以保存他尝试通过关闭系统时所做的更改。 我知道通过使用我们可以做到。 有人可以帮我如何使用信号处理程序吗 问题答案: 2012年5月更新(两年半后) Trejkaz评论: 在当前版本的Java上,此信号处理代码失败,因为“ ”信号“由VM或OS保留”。 此外,当某些东西要求关闭应用程序时,其他有效信号名称实际上都不会触

  • 我有一个Android应用程序,需要使用库。我正在使用与它进行接口。该库使用一个结构(我们称之为)。使用一组初始参数,其中包括指向函数的指针,它使用这些函数从我的应用程序请求更多数据,并将这些数据合并到计算过程中。一旦它拥有了所需的一切,它就会通过回调函数返回一个结果,它还需要一个指针。我需要将所有的回调函数挂接到我的应用程序中,从用户那里获取更多的数据,然后将这些数据返回到中,最后通过最终的回调

  • 我有一个最小的Android应用程序,使用启用了c支持的新项目向导创建。该应用程序的目的是允许c在捕获信号(SIGSEGV)后回调到java中。程序的顺序简短而甜蜜,伪代码就像这样: < li >输入本机方法< code>handleSegv() < ol > < li >本机代码回调到java中作为测试 < li >本机代码设置SIGSEGV处理程序 本机代码引发/发送SIGSEGV < li