私のAndroid NDKアプリケーションでは、C++ライブラリはUIスレッドとは異なるスレッドで実行されます。 C++からのJNI呼び出しは、JavaクラスFooのインスタンスを作成します。私はUIスレッドで作成された別のJavaオブジェクトBarをFoo上のメソッドを呼び出すようにしたいと思います。それ、どうやったら出来るの?Android/Java:別のスレッドで作成されたオブジェクトのメソッドを呼び出す方法は?
難易度:Fooには、対応するJNI関数をC++ライブラリから呼び出すいくつかのネイティブメソッドがあります。これらの呼び出しがスレッドセーフであることを保証するにはどうすればよいですか?
難易度2:Barのメソッドの中には、実際にはWebViewClientのコールバックメソッドをオーバーライドするものがあります。いくつかのメソッドのリターンコードは、Fooのメソッド呼び出しの結果に依存します。 Fooへの呼び出しは直ちに実行する必要があります。
実際、スレッドから同期結果が必要なデザイン全体は、おそらく悪臭を放ちます。 JNIライブラリがレガシーまたは第三者でない限り、FooをUIスレッドに移行することを検討してください。 –
まず、メソッドがJNIを通じて呼び出されているという事実を無視して始めてください。スレッドの安全性の問題は、使用しているプログラミング言語に大きく依存しません。 – fadden
難易度ボーナス3!これはすべて、開発中のクロスプラットフォームライブラリの一部です。クライアントは主にC++インタフェースを使用します.C++インタフェースはUIとは別のスレッド上でAndroid上で動作します。デザインのこの部分は不変で、私にはアクセスできません。したがって、これを実装することの難しさ。 – djcouchycouch