【发布时间】:2013-06-26 16:53:40
【问题描述】:
我正在尝试从后台线程的 android 应用程序中的 JNI 调用中调用 v8。它导致运行时崩溃并抱怨 v8::ObjectTemplate::New(v8::Handle
重现调用下面的jni
void JSfunc() {
v8::Isolate* currentIsolate = v8::Isolate::GetCurrent();
if(!currentIsolate) {
currentIsolate = v8::Isolate::New();
}
v8::HandleScope handle_scope(currentIsolate);
v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
}
来自以下 Java 代码
{
final Thread loadJS = new Thread() {
@Override
public void run() {
JSfunc());
}
};
loadJS.start();
}
如果您直接从 UI 线程或可运行对象调用该函数,则它可以工作。
有什么想法吗?
【问题讨论】:
-
如果你崩溃了,我想我们假设在 jni 代码 sn-p 中你为了我们的利益省略了 JSFunc 的长 JNI 标头声明是正确的? (别怪你……)
-
是的,我错过了 extern "C" { JNIEXPORT void Java_com_example_app_class_JSfunc( JNIEnv* env, jobject thiz ) { JSfunc(); } }
标签: java android java-native-interface v8 libv8