- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
跨多个 JNI 调用缓存 JNIEnv 对象是否安全?例如,我可以做类似的事情吗
void foo(JNIEnv* env)
{
static JNIEnv* cached;
if( ! cached )
cached = env;
/* use cached */
}
当然,我的代码实际上并没有这么傻,但上面的例子确实很好地展示了使用案例。
最佳答案
是的,您可以,但只能在单个线程内。您的缓存不能像上面那样简单,除非您以某种方式确定您的 native 代码只会在单线程。否则,您需要使用线程本地存储来保存您的 JNIEnv 引用。
关于java - 你能缓存 JNIEnv 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7096350/
我看到一些 jni 签名如下: // jni // WAY-1 JNIEXPORT void JNICALL Java_com_test_Test_testMethod(JNIEnv *env, j
我正在使用它们之间的 native 库编写一些 Java.NET 互操作代码,到目前为止一切进展顺利。 但是由于某些原因,我无法在 JNIEnv 下运行任何方法。 System::String^ JN
当我尝试从 C++ 中的线程调用 JVM 时,调试器说 JNIEnv 指针消失了。代码: void thread_call(JNIEnv* env,jobject text_view,jmethodI
我很好奇为什么 jni programming guide说 The JNI provides a slightly cleaner interface for C++ programmers. Th
我有一个使用 JNI 的 Android 项目。在实现监听器类的 CPP 文件中,有一个回调 x() 。当调用 x() 函数时,我想调用 java 类中的另一个函数。但是,为了调用该 java 函数,
我对 NDK 有疑问。 在我的 JNI_OnLoad 方法中,我缓存了 JavaVm 指针、调用该方法的类以及我稍后使用的方法 ID: JNIEXPORT jint JNICALL JNI_OnLoa
跨多个 JNI 调用缓存 JNIEnv 对象是否安全?例如,我可以做类似的事情吗 void foo(JNIEnv* env) { static JNIEnv* cached; if(
我将 JNIEnv 存储在全局中,以便稍后调用静态 java 方法。但是,存储一个指向 JNIEnv 的全局指针是否有必要,它们与任何其他 java 对象一样,或者它是一种不需要这个的特殊情况。 JN
我有一个 C++ dll,我想通过将函数导出到 C# 来在 Unity 中使用它。 Unity 项目在 Android 设备上运行,C++ 代码使用 java。要初始化 C++,我需要先调用以下函数:
在java中我有: package com.mypkg.utils; ... public class attitude_calculator { private long native_pt
我有两个文件:MyJni.cpp 是 jni 文件。而MyObject.c是一个普通的c文件。 这是 MyJni.cpp 文件的代码: JNIEXPORT void createMyObject(
JavaVM *javaVM = NULL;JNIEnv *jniEnv = NULL; ( createJavaVM )( &javaVM, ( void * )&jniEnv, &javaVMIn
在 Monodroid 中,我试图通过 JNIEnv 访问自定义 Java 类。当我在主项目中添加类时,我可以在主项目和库项目中访问它。 例如:如果 jniTest.java 是项目 A 中的 And
我是运行第一个 hello JNI 示例的 Android NDK 新手。我添加了 jni 文件夹并添加了 c 文件,其中我收到一些 Unresolved 错误。 我也将项目转换为 C/C++ 并在
了解到JNI接口(interface)指针(JNIEnv *)只在当前线程中有效。假设我在 native 方法中启动了一个新线程;它如何将事件异步发送到 Java 方法?因为这个新线程不能引用(JNI
As we know JNIEnv is the pointer to the VM. And as name suggests JavaVM is a VM itself. Is there any
我需要在我的 native 库中获取 Android 唯一设备 ID。据我所知,它可以用Java API来完成,我需要使用JNI。我读过this ,也有类似的问题,但是访问的是不同的ID。但是这个解决
我的 Main.cpp 文件中有一个这样的 JNI 调用: JNIEXPORT jstring JNICALL Java_packagename_MainActivity_Generate
我一直在尝试调用 JNIEnv 函数 GetVersion(对于初学者),其索引为 4(根据 this site )。 我一直在使用 this site供引用,并通过使用 [ebp + x] 而不是参
我对此方法的定义感兴趣。但我只找到了 jni.h 文件中的声明......我猜一定有一个实现! :)谢谢 最佳答案 jni.h 文件在其提供的定义集中是跨 JVM 的标准。实际的实现随您的 JVM 一
我是一名优秀的程序员,十分优秀!