關於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
   有對這方面的函數的描述
相關文章
相關標籤/搜索