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

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ù)器托管
日韩精品人妻中文字幕满员| 91午夜福利国产在线观看| 天堂av在线免费观看| 亚洲国产精品视频中文字幕| 91欧美在线激情视频| 亚洲精品成人一区二区| 人妻少妇精品一区毛二区| 视频一区二区日韩不卡| 黄色三级亚洲男人的天堂| 欧美老熟妇精品一区二区| 亚洲av一本岛在线播放| 久久精品国产亚洲av麻豆网站| 亚洲精品在线观看日本| 亚洲精品入口一区二区| 刚出嫁新婚少妇很紧很爽| 日韩精品中文字幕影视| 国产自拍偷拍自拍偷拍| 中文成人无字幕乱码精品| 思思久久96热在精品国产| 亚洲av免费一区二区三区| 国产精品深夜在线观看| 久久国产欧美日韩精品| 久久综合给合综合久久| 97在线观看视频在线观看| 日本一道本不卡一区二区| 亚洲av日韩欧美精品| 日本91大神在线观看| 国产精品国产三级丝袜| 我想看亚洲一级黄色录像| 欧美日韩一区二区三区色拉拉| 亚洲成熟中老妇女视频| 男女激情视频久久精品| 久久中文字幕人妻熟av| 日本欧美激情在线观看| 日本在线不卡二区三区| 一级黄片一区二区三区| 欧美日韩一区二区三区四区高清视频| 日本在线观看免费高清| 免费欧美大片在线观看高清| 日本中文有码视频在线观看| 国产精品午夜福利91|