編輯:關於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");
調試的過程我們在eclipse中來看一下一般調試的過程:1、debug模式編譯2、打上斷點3、運行調試4、單步調試step into:跳到函數體內部step over:不
開源項目:Android-ObservableScrollView**項目依賴添加:compile ‘com.github.ksoichiro:android
國慶回了趟家,昨天真不想走,離家近的感覺太好。唉,不扯這些,說說今天的正事吧。上篇博客中介紹了自定義AutoCompleteTextView ,但是用到了一個很蹩腳的技術
Google在2015的IO大會上,給我們帶來了更加詳細的Material Design設計規范,同時,也給我們帶來了全新的Android Design Support