Android NDK开发之旅14 JNI 缓存策略
生活随笔
收集整理的這篇文章主要介紹了
Android NDK开发之旅14 JNI 缓存策略
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
###緩存策略
有兩種:
####一、使用局部的static變量:
JNIEXPORT void JNICALL Java_com_test_JniTest_cache (JNIEnv * env, jobject jobj){static jfieldID fid = NULL;jclass clz = (*env)->GetObjectClass(env, jobj);if (fid == NULL){fid = (*env)->GetFieldID(env, clz, "key", "Ljava/lang/String;");printf("fid inti once");} } 復制代碼測試:
public native void cache();public static void main(String[] args) {JniTest test = new JniTest();for (int i = 0; i < 100; i++) {test.cache();} } 復制代碼說明:
獲取jfieldID只獲取一次。局部靜態變量只能在本方法的作用域中使用。
也可以搞個全局,但是fid不同函數可以使用,但是值不一樣,值很難統一。因此官方推薦局部的。
局部靜態變量的生命周期:
####二、動態庫加載的時候初始化全局變量
public static native void initIds();static {System.loadLibrary("JniTest");initIds(); }public static void main(String[] args) {JniTest test = new JniTest();for (int i = 0; i < 100; i++) {test.cache();} } 復制代碼C代碼如下:
//初始化兩個全局變量,動態庫加載完成之后,立刻緩存起來 //以后可以在其他函數使用,聲明周期也是跟應用程序(進程)一致 jfieldID key_fid; jmethodID random_mid; JNIEXPORT void JNICALL Java_com_dongnaoedu_jni_JniTest_initIds(JNIEnv *env, jclass jcls){key_fid = (*env)->GetFieldID(env, jcls, "key", "Ljava/lang/String;");random_mid = (*env)->GetMethodID(env, jcls, "genRandomInt", "(I)I"); } 復制代碼如果覺得我的文字對你有所幫助的話,歡迎關注我的公眾號:
我的群歡迎大家進來探討各種技術與非技術的話題,有興趣的朋友們加我私人微信huannan88,我拉你進群交(♂)流(♀)。
總結
以上是生活随笔為你收集整理的Android NDK开发之旅14 JNI 缓存策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF 4 Ribbon 开发 之 标签
- 下一篇: 简单的聊天页面