缓存JNI对象和线程安全(在Android系统中

我正在用本地线程(pthreads)编写一个C++应用程序,我需要调用一些Java方法等。我不确定哪些JNI对象可以安全地缓存,即存储在我的C++对象中供以后使用,可能是由不同的线程调用。我知道如果我的类的方法可以被不同的线程调用,我就不能缓存JNIEnv,而是要缓存JavaVM,并通过附加当前线程得到一个JNIEnv。但这是否也意味着我不能缓存从JNIEnv中获得的任何东西呢? 我需要使用以下JNIEnv方法获得的对象。

FindClass, GetMethodID, NewObject, NewGlobalRef。

这些对象在不同的线程中都是有效的,还是每次都要获取新的对象?如果是后者,有没有办法在一个本地线程中创建一个对象,并在不同的线程中能够访问同一个对象?

解决方案:

对象不是线程特定的。 它们最初是 “本地 “引用,如果你想保留一个副本,你必须通过创建(并最终删除)一个 “全局 “引用来告诉虚拟机你正在这样做。

请看 http:/developer.android.comtrainingarticlesperf-jni.html。特别是 “本地和全局引用 “部分。

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何改变状态栏字体颜色?[重复]

2022-9-9 0:22:39

未分类

如何使用javascript扩展表格数据?

2022-9-9 0:22:41

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索