1、關(guān)于jni調用種種情形的分析,可以參考一下如下網(wǎng)址中的文章:http://android.wooyd.org/JNIExample/
2、native層回調java層:
native層沒(méi)有自己的線(xiàn)程,只是在java調用native代碼,native代碼的某個(gè)位置,需要回訪(fǎng)java層的代碼以實(shí)現某些功能,這種情況比較簡(jiǎn)單,網(wǎng)上絕大多數討論的都是這方面的。
native層建立了自己的線(xiàn)程,在線(xiàn)程中需要回訪(fǎng)java層,這時(shí)候,native線(xiàn)程通過(guò)jvm獲取JNIEnv時(shí),不能成功。
原因分析:android 源碼中的文檔: platform\dalvik\docs\jni-tips.html 中有一段:FindClass didn't find my class對此做了分析。
通過(guò)網(wǎng)上的資料,發(fā)現native線(xiàn)程通過(guò)jvm獲取JNIEnv時(shí),和普通的jni函數不一致,需要將線(xiàn)程attach到j(luò )vm才可以??梢酝ㄟ^(guò) AttachCurrentThread 來(lái)獲取 JNIEnv,實(shí)際上這個(gè)函數的功能不只是獲取JNIEnv這么簡(jiǎn)單,其主要作用是將線(xiàn)程綁定到j(luò )vm,這實(shí)際上會(huì )導致native線(xiàn)程不結束,jvm就不會(huì )結束。關(guān)于這個(gè)問(wèn)題,可以參考《JNI_OnLoad 的非預期現象
》:http://www.360doc.com/showWeb/0/0/114075885.aspx
3、關(guān)于多線(xiàn)程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
4、有一篇文檔《多線(xiàn)程的JNI Native
》:
http://www.docin.com/p-104345715.html 也對這方面有演示例子
4、關(guān)于native to java 的回調機制有如下討論:
http://groups.google.com/group/android-ndk/browse_thread/thread/618ff83dd88694b
已被轉載備份到:http://www.360doc.com/showWeb/0/0/114084161.aspx
5、jvm->getEnv,在不同的線(xiàn)程中運行時(shí),獲得的值應該是不一致的。導致了上述的問(wèn)題。
6、sun官網(wǎng)文檔:http://java.sun.com/docs/books/jni/html/functions.html
有對這方面的函數的描述
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。