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();
}
Другие вопросы по тегам