欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

AndroidJNI調(diào)用時緩存字段和方法ID

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Android JNI 調(diào)用時緩存字段和方法ID,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

目前創(chuàng)新互聯(lián)公司已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、東區(qū)網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

使用時緩存

使用時緩存,就是在調(diào)用時查找一次,然后將它緩存成 static 變量,這樣下次調(diào)用時就已經(jīng)被初始化過了。

直到內(nèi)存釋放了,才會緩存失效。

extern "C"
JNIEXPORT void JNICALL
Java_com_glumes_cppso_jnioperations_CacheFieldAndMethodOps_staticCacheField(JNIEnv *env, jobject instance, jobject animal) {
 static jfieldID fid = NULL; // 聲明為 static 變量進行緩存
 // 兩種方法都行
// jclass cls = env->GetObjectClass(animal);
 jclass cls = env->FindClass("com/glumes/cppso/model/Animal");
 jstring jstr;
 const char *c_str;
 // 從緩存中查找
 if (fid == NULL) {
  fid = env->GetFieldID(cls, "name", "Ljava/lang/String;");
  if (fid == NULL) {
   return;
  }
 } else {
  LOGD("field id is cached");
 }
 jstr = (jstring) env->GetObjectField(animal, fid);
 c_str = env->GetStringUTFChars(jstr, NULL);
 if (c_str == NULL) {
  return;
 }
 env->ReleaseStringUTFChars(jstr, c_str);
 jstr = env->NewStringUTF("new name");
 if (jstr == NULL) {
  return;
 }
 env->SetObjectField(animal, fid, jstr);
}

通過聲明為 static 變量進行緩存。但這種緩存方式顯然有弊端,當(dāng)多個調(diào)用者同時調(diào)用時,就會出現(xiàn)緩存多次的情況,并且每次調(diào)用時都要檢查是否緩存過了。

初始化時緩存

在初始化時緩存,就是在類加載時,進行緩存。當(dāng)類被加載進內(nèi)存時,會先調(diào)用類的靜態(tài)代碼塊,所以可以在類的靜態(tài)代碼塊中進行緩存。

比如:

public class CacheFieldAndMethodOps extends BaseOperation {
 
 static {
  initCacheMethodId(); // 靜態(tài)代碼塊中進行緩存
 }
 private static native void initCacheMethodId();
}

在靜態(tài)代碼塊中,可以將所需要的字段 id 或者方法 id 緩存成全局變量。

具體代碼如下:

// 全局變量,作為緩存方法 id
jmethodID InstanceMethodCache;

// 初始化加載時緩存方法 id
extern "C"
JNIEXPORT void JNICALL
Java_com_glumes_cppso_jnioperations_CacheFieldAndMethodOps_initCacheMethodId(JNIEnv *env, jclass type) {
 jclass cls = env->FindClass("com/glumes/cppso/model/Animal");
 InstanceMethodCache = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
}

在 JNI 中直接將方法 id 緩存成全局變量了,這樣再調(diào)用時,就不要再進行一次查找了,并且避免了多個線程同時調(diào)用會多次查找的情況。

extern "C"
JNIEXPORT void JNICALL
Java_com_glumes_cppso_jnioperations_CacheFieldAndMethodOps_callCacheMethod(JNIEnv *env, jobject instance, jobject animal) {
 jstring name = (jstring) env->CallObjectMethod(animal, InstanceMethodCache);
 const char *c_name = env->GetStringUTFChars(name, NULL);
 LOGD("call cache method and value is %s", c_name);
}

上述就是小編為大家分享的Android JNI 調(diào)用時緩存字段和方法ID了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁題目:AndroidJNI調(diào)用時緩存字段和方法ID
網(wǎng)頁URL:http://aaarwkj.com/article36/igjhsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)站制作、面包屑導(dǎo)航、服務(wù)器托管網(wǎng)站內(nèi)鏈、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
在线观看国产高清自拍| 国产亚洲欧美日韩看国产| 亚洲熟女乱妇爽到高潮| 国产精品一品二品国精品| 伊人亚洲一区二区三区| 亚洲综合久久五月天| 日本av电影一区二区三区四区| 亚洲巨人精品福利导航| 亚洲精品在线观看第一页| 国产污视频网站在线观看 | 国产又粗又硬又长又爽在线观看 | 国产精品免费视频一区二区三区| 琪琪精品免费一区二区三区| 老熟女露脸吞精一二三四区 | 给我搜亚洲免费播放黄色大片| 欧美精品亚洲二区中文乱码| 91大片在线观看视频| 亚洲精品尤物福利在线一区| 97免费人妻在线视频| 国产龙熟女高潮一区二区| 午夜少妇伦理一区二区| 久久久国产精品调教网站| 国产一区二区黑丝美女| 亚洲国产精品福利在线| 亚洲成人av综合在线| 一欧美一区二区三区| 欧美精品一区二区精品久久| 男人的天堂av最新版本| 久久精品女人天堂av| 亚洲国产理论片在线观看| 亚州欧美精品一区二区| 国产在线观看国产精品| 日韩一区二区三区91| 欧美亚洲国产另类第一页| 成年爽片在线观看播放欧美| 九九热最新视频免费看| 午夜精品三级一区二区三区| 99亚洲综合一区二区三区| 五月婷婷六月丁香综合激情| 国产熟女碰碰人人a久久| 免费观看黄片视频在线观看|