-1

JavaScriptCore と JNI を使用しており、Open GL ES Android アプリケーションで JS コードを使用しようとしています。

JSEvaluateScript, JSObjectMakeFunction, JSObjectCallAsFunctionタイマーを使用せずにメインループで呼び出すと(したがって、への最初の呼び出しの前にon_draw_frame)、すべて問題ありません。

しかし、私が試してみるJSEvaluateScript, JSObjectMakeFunction, JSObjectCallAsFunctiondrawInRest、または/および setTimeout の実装を使用して

setTimeout ( function () {
    console.log("i'm in the callback");
}, 1000 );

解析エラー (ただし、構文は正しい) または範囲エラー: 最大呼び出しスタックを超えています (ここに再帰呼び出しがないことは 100% 確信しています)。

詳細情報:私はこれを(メインループJSEvaluateScriptの外側の)呼び出しと2番目の呼び出し( setTimeoutコールバックをトリガーするときにから呼び出す)の間にこれを取得しますon_draw_frameon_draw_frame

11-08 15:52:03.905: D/libEGL(2916): loaded /system/lib/egl/libEGL_emulation.so
11-08 15:52:03.915: D/(2916): HostConnection::get() New Host Connection established 0x2a1d68d8, tid 2916
11-08 15:52:03.925: D/libEGL(2916): loaded /system/lib/egl/libGLESv1_CM_emulation.so
11-08 15:52:03.935: D/libEGL(2916): loaded /system/lib/egl/libGLESv2_emulation.so
11-08 15:52:03.976: W/EGL_emulation(2916): eglSurfaceAttrib not implemented
11-08 15:52:03.985: D/OpenGLRenderer(2916): Enabling debug mode 0
11-08 15:52:04.026: D/(2916): HostConnection::get() New Host Connection established 0x2a1e5ae0, tid 2929

編集: エラーが発生する場所を見つけます: 最初の JNI 呼び出しの後。

私は説明する :

最初の JNI 呼び出しで、my への静的参照を含む javaScriptView を作成しますJSGlobalContextJSEvaluateScript次に、setTimeout を実行するスクリプトを評価するために呼び出します。

私は OpenGL ES を設定して、それぞれon_draw_frameで JNI メソッドを呼び出してon_draw_framec++ で実行します。そのため、いくつかの JNI 呼び出し (setTimeout のタイマーに依存) の後、setTimeout のコールバックが呼び出されてクラッシュします。

これを修正する方法についてのアイデアはありますか?

4

1 に答える 1