关于native层回调java层

一、关于jni调用种种情形的分析,能够参考一下以下网址中的文章:http://android.wooyd.org/JNIExample/

二、native层回调java层:
   native层没有本身的线程,只是在java调用native代码,native代码的某个位置,须要回访java层的代码以实现某些功能,这种状况比较简单,网上绝大多数讨论的都是这方面的。
   native层创建了本身的线程,在线程中须要回访java层,这时候,native线程经过jvm获取JNIEnv时,不能成功。
   缘由分析:android 源码中的文档: platform\dalvik\docs\jni-tips.html 中有一段:FindClass didn't find my class 对此作了分析。
   经过网上的资料,发现native线程经过jvm获取JNIEnv时,和普通的jni函数不一致,须要将线程attach到jvm才能够。能够经过 AttachCurrentThread 来获取 JNIEnv,实际上这个函数的功能不仅是获取JNIEnv这么简单,其主要做用是将线程绑定到jvm,这实际上会致使native线程不结束,jvm就不会结束。关于这个问题,能够参考《JNI_OnLoad 的非預期現象 》:http://www.360doc.com/showWeb/0/0/114075885.aspx

三、关于多线程jni回调java,google groups中有以下讨论
http://groups.google.com/group/android-ndk/browse_thread/thread/f40a3ec8413e8b77/534f2ef35b802e08
已被转载备份到以下地址:
http://www.360doc.com/showWeb/0/0/114078345.aspx
四、有一篇文档《多線程的JNI Native   》: http://www.docin.com/p-104345715.html  也对这方面有演示例子
四、关于native to java 的回调机制有以下讨论:
http://groups.google.com/group/android-ndk/browse_thread/thread/618ff83dd88694b
已被转载备份到:http://www.360doc.com/showWeb/0/0/114084161.aspx



五、jvm->getEnv,在不一样的线程中运行时,得到的值应该是不一致的。致使了上述的问题。

六、sun官网文档:http://java.sun.com/docs/books/jni/html/functions.html
   有对这方面的函数的描述
相关文章
相关标签/搜索