当eclipse console 不再出现信息即死锁状态时候,用注释中的两条命令观察信息。
----->第一次发,有啥错误多包涵呀,转载请注明
最近做的一个小工程需要用到回调函数,由linux层回调到java层,调试的时候会遇到一些问题,免得忘记,在这里记录一下:
JNI的各种数据类型和数据结构我就不详细介绍了,简单说一下
JavaVM *m_jvm; java虚拟机,这个变量可以在不同的线程里面使用,获取的方法也有很多,可以通过env获取,也可以通过JNI_OnLoad函数来获取
JNIEnv *g_env; 这个是一个线程的相关变量,这里注意的是一个线程的,对于每个线程来说是唯一的,不能在不同的线程里面使用同一个env;
接下去就是上代码了
这是一个回调函数,给linux用的,上报状态的,在代码已经注明了必须attach,不然会报以下错误
其实也很好理解,因为大家注意到我的接口并不是标准的JNI接口,这个接口是我自己创建供linux层回调的,一般标准的JNI接口,是直接供java层使用的,那时候的多线程attach其实是attach到UI线程上的,但在linux里面创建了一个线程去回调这个状态函数的时候,并没有涉及到UI线程,所以是到了JNI层的话,必须也得要有一个线程去处理这个回调,下面的就好理解了,JNI线程去回调java的时候,java也必须要有一个线程去处理,下面会讲到。
在代码里面可以看到我调用的是statebroadcast这个回调函数
这里必须要用handler去处理,不然会报如下错误
这样从linux线程通过JNI调用到JAVA的函数就完全可以啦,第一次作记录,如果 有错误,欢迎斧正!