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

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://www.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熟女成人精品一区二区| 日本2区3区视频在线观看| 中文字幕日产乱码一二三区| 亚洲毛片在线免费播放| 欧美日本国产专区一区| 国产一区二区日韩一区| 亚洲欧洲精品真人av蜜臀| 成人午夜在线免费观看| 福利av一区二区三区| 久久精品视频亚洲一级| 国产美女主播一二三区| 深夜福利在线观看97| 亚洲黄色成人在线观看| 国产老熟女高潮精品视频网站免费 | 激情五月综合开心五月| 国产伊人久久综合网| 麻豆视频在线观看传媒| 在线观看后入大屁股| 婷婷色爱区综合五月激情| 亚洲另类熟女国产精品老| 欧美日韩一级一区二区三区| 亚洲日本韩国视频久久精品| 中文字幕一区二区三天| 午夜福利片在线观看视频| 精品国产欧美亚洲91| av蜜臀一区二区三区| 久久精品噜噜噜成人av农村| 正在播放蜜臀av在线| 日本成人午夜福利电影| 国产精品大片久久激情四射| 最新国产毛片久热精品视频| 精品乱码一区二区三区四区| 国产三级自拍视频在线观看| 高清日韩精品视频在线观看| 亚洲精品在线观看日本| 久久人体午夜激情视频| 精品国产综合一区二区三区 | 两性色午夜视频免费网站| 欧美在线免费黄片视频| 中文字幕丝袜精品久久| 天堂av在线资源观看|