Java 如何在回调函数中发送广播
我创建了一个android项目,项目是一个服务,没有UI。Java层(函数名为onReceive)将接收对startservice的广播。将调用本机c函数(函数名为startService)。C函数将创建一个线程,在此线程中,它将调用java中的函数(函数名为SendLaResult(本机)和SendLaResult(java))。java函数将向另一个应用程序发送广播。这是一个主要流程。 下面的代码是示例代码 1.开始工作 2.native-lib.cpp,在java中调用函数。 4.调用sendBroadcast时,会发生以下崩溃。 我发现sendBroadcast是异步的,它最终被系统调用,并立即返回。因此,我删除了函数SendResult中的以下源代码Java 如何在回调函数中发送广播,java,multithreading,java-native-interface,native,broadcast,Java,Multithreading,Java Native Interface,Native,Broadcast,我创建了一个android项目,项目是一个服务,没有UI。Java层(函数名为onReceive)将接收对startservice的广播。将调用本机c函数(函数名为startService)。C函数将创建一个线程,在此线程中,它将调用java中的函数(函数名为SendLaResult(本机)和SendLaResult(java))。java函数将向另一个应用程序发送广播。这是一个主要流程。 下面的代码是示例代码 1.开始工作 2.native-lib.cpp,在java中调用函数。 4.调用se
g_JavaVM->DetachCurrentThread();
01-02 18:15:03.696 13707-13743/com.xxx.xxx.xxxx
E/native-lib: NewObject jparams error Success !!!
该崩溃不会发生,但会出现以下错误日志,请参考函数SendResult中的源代码
g_JavaVM->DetachCurrentThread();
01-02 18:15:03.696 13707-13743/com.xxx.xxx.xxxx
E/native-lib: NewObject jparams error Success !!!
如何解决第一个问题(sendBroadcast崩溃)
或者如何解决发送问题(NewObject返回null)
请给出一些建议。我解决了这个问题。
不要在函数SendLaResult中发送广播,将每个LaResult存储到列表中,在Oncreate中创建另一个线程,在此线程sendboadcast列表中的每个项目。在新创建的服务连接之前,它将不具有基本上下文,因此,
ContextWrapper.sendBroadcast
将以NullPointerException
失败。不过,我并不真正理解本机代码的意义。为什么你不能用Java来完成所有这些呢?@Michael谢谢你的回答,我同意你的看法。然而,我必须在本机端实现所有的工作,我不能在Java中完成所有这些。总的来说,本机线程中有一个循环,对于每个循环,在创建结果后,我们需要将结果发送到其他应用程序。
g_JavaVM->DetachCurrentThread();
01-02 18:15:03.696 13707-13743/com.xxx.xxx.xxxx
E/native-lib: NewObject jparams error Success !!!