小编cie*_*ech的帖子

JNI保持对对象的全局引用,使用其他JNI方法访问它.在多个JNI调用中保持C++对象的活动

我刚刚开始使用JNI,我遇到了以下问题.

我有一个C++库,它有一个简单的类.我有三个从Java Android项目调用的JNI方法,它们实例化所述类,分别在实例化类上调用一个方法并销毁它.我保留了对这个对象的全局引用,因此在其他两个JNI方法中我可以使用它.

我怀疑我不能这样做.当我运行应用程序时,我收到运行时错误(使用引用陈旧),我怀疑这是因为在后续调用其他JNI方法时全局引用无效.

是实现我想要的唯一方法(让对象存在多个JNI调用),实际将指向实例化类的指针传回给Java,将其保存在那里,然后将其传递回JNI函数?如果是这样,那很好,我想确保我不能用全局参考来做,而且我不只是遗漏了一些东西.

我已经阅读了有关JNI中全局/本地引用的文档和章节,但它似乎只适用于Java类,而不适用于我自己的本机C++类,或者我错了.

这是代码,如果我的描述不清楚(总结,我想知道这种持久化对象的机制是否会起作用):

Java的:

package com.test.ndktest;

import android.app.Activity;
import android.os.Bundle;
import android.app.AlertDialog;

public class NDKTestActivity extends Activity {
static {
    System.loadLibrary("ndkDTP");
}

private native void initializeTestClass();
private native void destroyTestClass(); 

private native String invokeNativeFunction();


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    initializeTestClass();

    String hello = invokeNativeFunction();

    destroyTestClass();

    new AlertDialog.Builder(this).setMessage(hello).show();
}
Run Code Online (Sandbox Code Playgroud)

}

JNI标题:

extern "C" {

jstring Java_com_test_ndktest_NDKTestActivity_initializeTestClass(JNIEnv* env,     jobject javaThis);
jstring Java_com_test_ndktest_NDKTestActivity_destroyTestClass(JNIEnv* env, jobject javaThis);
jstring Java_com_test_ndktest_NDKTestActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis);

};
Run Code Online (Sandbox Code Playgroud)

JNI机构:

#include <string.h>
#include …
Run Code Online (Sandbox Code Playgroud)

c++ java-native-interface android

9
推荐指数
2
解决办法
6930
查看次数

mongosh 中的 Promise 或 async/await?

我有一个 mongosh 脚本,应该同步执行。我可以在 mongosh 中使用 Promise 或 async/await 吗?看来我不行了 有没有办法确保事情不会乱序执行?

例如

(1) db.clients.find({}).forEach((client) => {
  db.addresses.insertMany([
    { ....
    }

(2) db.addresses.find({}).forEach...
Run Code Online (Sandbox Code Playgroud)

当 1 仍在循环时,2 由 mongosh 执行。有什么想法吗?

mongodb-shell

5
推荐指数
1
解决办法
467
查看次数