您好,登錄后才能下訂單哦!
JNI是Java Native Interface的縮寫,是Java平臺的重要特性,使得Java代碼可以方便地與C/C++代碼編譯生成的動態(tài)鏈接庫進行交互。本文主要給出一份示例代碼(工程文件見附件),描述如何在Android的JNI層開啟一個線程,并在線程中回調(diào)Java層的函數(shù)。
代碼主要分為Java層(java代碼)和JNI層(c語言代碼),首先看看Java層的代碼(Native.java)。
如上所示,Java層與JNI層的接口代碼主要封裝在Native類中,該類定義了三個native函數(shù),分別完成jni庫的初始化,調(diào)用jni層開啟線程,調(diào)用jni層關閉線程等功能。并且提供一個回調(diào)函數(shù)(onNativeCallback),供jni層調(diào)用,并在回調(diào)函數(shù)中打印count的值。
再看看JNI層是如何開啟線程并回調(diào)Java層的(native.c),關鍵的地方都在代碼中進行了注釋:
1. 頭文件包含和全局變量的定義
2. 初始化函數(shù)的實現(xiàn)
3. 開啟關閉線程的實現(xiàn)
4. 線程的實現(xiàn)(關鍵)
由上述代碼可以看到,JNI層通過pthread庫完成了線程的創(chuàng)建,需要特別注意的是,JNI層的線程中,必須通過全局的JavaVM來獲取到環(huán)境變量,也必須通過全局的jobject獲取java類對象,從而找到java端的函數(shù),進行回調(diào)。
代碼的工程文件見附件,編譯運行后,會在logcat調(diào)試窗口不斷打印count的值。本文就介紹到這,主要是提供一份示例代碼給初學者,有疑問歡迎留言或者來信lujun.hust@gmail.com交流,或者關注我的新浪微博 @盧_俊 獲取最新的文章和資訊。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。