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

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九色| 精品中文人妻中文字幕| 真人国产一级美女免费视频| 打开网址国语一级黄色片| 国产高清大片一级黄色| 亚洲最大成人综合福利网| 97水蜜桃视频在线观看| 男人的天堂久久精品激情| 午夜视频在线看一区免费| 精品国产精品中文字幕| 日韩欧美黄片一区二区三区| 国产精品大屁股白浆一区二区| 情侣自拍偷拍亚洲天堂区| 日韩精品一区二区毛片| 东京成人热av男人的天堂| 国产91在线观看网站| 国产一区二区激情在线| 亚洲全乱码精品一区二区| 欧美成人精品午夜一区二区| 亚洲不卡在线免费av| 亚洲欧美日本国产一区| 人妻中文字幕在线一二区| 国产有码视频一区二区三区| 日本一二不卡高清在线视频| 91老熟女露脸大合集| 国产精品兄妹在线观看91| 日本加勒比一道本东京热| 国产亚洲欧美日韩激情在线| 亚洲无综合素人在线观看| 亚洲精品不卡一二三区| 亚洲伦理第一页中文字幕| 亚洲欧洲日本在线天堂| 91国内精品手机在线高清| 亚洲少妇插进去综合网| 2023国产精品一区| 亚洲天堂福利视频网站| 91日本视频在线播放|