电竞比分网-中国电竞赛事及体育赛事平台

分享

關(guān)于native層回調(diào)java層

 techres 2011-05-03
1、關(guān)于jni調(diào)用種種情形的分析,可以參考一下如下網(wǎng)址中的文章:http://android./JNIExample/

2、native層回調(diào)java層:
   native層沒有自己的線程,只是在java調(diào)用native代碼,native代碼的某個位置,需要回訪java層的代碼以實現(xiàn)某些功能,這種情況比較簡單,網(wǎng)上絕大多數(shù)討論的都是這方面的。
   native層建立了自己的線程,在線程中需要回訪java層,這時候,native線程通過jvm獲取JNIEnv時,不能成功。
   原因分析:android 源碼中的文檔: platform\dalvik\docs\jni-tips.html 中有一段:FindClass didn't find my class 對此做了分析。
   通過網(wǎng)上的資料,發(fā)現(xiàn)native線程通過jvm獲取JNIEnv時,和普通的jni函數(shù)不一致,需要將線程attach到j(luò)vm才可以??梢酝ㄟ^ AttachCurrentThread 來獲取 JNIEnv,實際上這個函數(shù)的功能不只是獲取JNIEnv這么簡單,其主要作用是將線程綁定到j(luò)vm,這實際上會導(dǎo)致native線程不結(jié)束,jvm就不會結(jié)束。關(guān)于這個問題,可以參考《JNI_OnLoad 的非預(yù)期現(xiàn)象》:http://www.woyoushebao.com/showWeb/0/0/114075885.aspx

3、關(guān)于多線程jni回調(diào)java,google groups中有如下討論
http://groups.google.com/group/android-ndk/browse_thread/thread/f40a3ec8413e8b77/534f2ef35b802e08
已被轉(zhuǎn)載備份到如下地址:
http://www.woyoushebao.com/showWeb/0/0/114078345.aspx
4、有一篇文檔《多線程的JNI Native 》:http://www.docin.com/p-104345715.html 也對這方面有演示例子
4、關(guān)于native to java 的回調(diào)機制有如下討論:
http://groups.google.com/group/android-ndk/browse_thread/thread/618ff83dd88694b
已被轉(zhuǎn)載備份到:http://www.woyoushebao.com/showWeb/0/0/114084161.aspx



5、jvm->getEnv,在不同的線程中運行時,獲得的值應(yīng)該是不一致的。導(dǎo)致了上述的問題。

6、sun官網(wǎng)文檔:http://java./docs/books/jni/html/functions.html
   有對這方面的函數(shù)的描述

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多