Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在回调函数中发送广播_Java_Multithreading_Java Native Interface_Native_Broadcast - Fatal编程技术网

Java 如何在回调函数中发送广播

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

我创建了一个android项目,项目是一个服务,没有UI。Java层(函数名为onReceive)将接收对startservice的广播。将调用本机c函数(函数名为startService)。C函数将创建一个线程,在此线程中,它将调用java中的函数(函数名为SendLaResult(本机)和SendLaResult(java))。java函数将向另一个应用程序发送广播。这是一个主要流程。 下面的代码是示例代码

1.开始工作 2.native-lib.cpp,在java中调用函数。 4.调用sendBroadcast时,会发生以下崩溃。 我发现sendBroadcast是异步的,它最终被系统调用,并立即返回。因此,我删除了函数SendResult中的以下源代码

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 !!!