基本的に 250K JNI のラッパーであるアプリを作成しています。JNI (ゲーム エンジン) には、handle_penUp(int x, int y) のような API があります。場合によっては、(Java コードへのコールバックを介して) handle_penUp() 内からユーザーにクエリを実行する必要があるため、クエリの実装に使用するダイアログをブロックする必要があります。
実行のメインスレッドがブロックできないことを理解しています。そのため、ブロックが必要なコールバックが発生する可能性があるすべての JNI 呼び出しを行う 2 番目のスレッドを作成しました。2 番目のスレッド内で、ブロッキング ダイアログを表示する必要がある場合は、セマフォで startActivityForResult() を呼び出してから acquire() を呼び出します。メイン スレッドで onActivityResult() が呼び出されると、同じセマフォで release() が呼び出されます。
これは、クエリが新しいアクティビティとして実装されている場合は機能しますが、既存のアクティビティ内で showDialog() を使用したい場合は機能しません。ログ メッセージは、私のスレッドが Looper を必要としていると教えてくれます。私は1つ追加しています-そしてそれが機能するかどうかについての情報を追加します-しかし、ここで間違った道を進んでいるように感じます. 私が必要としているのは、ブロッキング ダイアログを実行するためのレシピです (他のすべてのプラットフォームにブロック ダイアログがあり、移植されたコードがしばしばそのように機能するという理由だけで役立つ場合)。