v8 на фоне темы в Android JNI
Я пытаюсь вызвать v8 из вызова JNI в приложении для Android из фонового потока. Это вызывает сбой во время выполнения с жалобой на 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();
}
Если вы вызываете функцию непосредственно из потока пользовательского интерфейса или запускаемого приложения, она работает.
Есть идеи?
1 ответ
Решение
Проблема в том, что код для генерации Isolate отсутствует
currentIsolate->Enter();
поэтому правильная функция JNI
void JSfunc() {
v8::Isolate* currentIsolate = v8::Isolate::GetCurrent();
if(!currentIsolate) {
currentIsolate = v8::Isolate::New();
currentIsolate->Enter();
}
v8::HandleScope handle_scope(currentIsolate);
v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
}