Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android NDK學習筆記8-JNI的訪問域

Android NDK學習筆記8-JNI的訪問域

編輯:關於Android編程

java有兩類域:實例域和靜態域。類的每個實例都有自己的實例域副本,而一個類的所有實例共享同一個靜態域。
JNI提供了訪問兩類域的函數,例如:

public class JavaClass {
// 實例域
private String instanceField = "Instance Field ";
// 靜態域
private static String staticField = "Static Field ";
}

● 獲取域ID
JNI提供了用域ID訪問兩類域的方法,可以通過給定實例的class對象獲取域ID,用GetObjectClass函數可以獲得class對象,例如:

jclass clazz
clazz = (*env)->GetObjectClass(env,instance);

有兩個獲得域ID的函數分別適用於不同類型域,GetFieldId函數用於獲取實例域,例如:
1.使用GetFieldID獲取實例域的ID

jfieldID instanceFieldId;
instanceField = (*env)->GetFieldID(env,clazz,"instanceFieldId","Ljava/lang/String;");

2.使用GetStaticFieldID獲取靜態域的ID

jfieldID staticFieldId;
staticFieldId = (*env)->GetStaticFieldID(env,clazz,"staticFieldId","Ljava/lang/String;");

兩個函數的最後一個參數是java中表示域類型的域描述符,其中”Ljava/lang/String;”表明域類型是Sting。
通常為了提高應用程序的性能,可以緩存域ID,一般總是緩存頻率最高的域ID
● 獲取域
在獲得域ID之後,可以用GetField函數獲得實際的實例域,例如:
1.獲得實例域

jstring instanceFieldId;
instanceField = (*env)->GetObjectField(env,clazz,"instanceFieldId");

2.獲得靜態域

jfieldID staticField;
staticFieldId = (*env)->GetStaticObjectField(env,clazz,"staticFieldId");
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved