私のアプリは99%Cで書かれており、NDKでは利用できないもののためのJavaヘルパー関数がいくつかあります。ファイルチューザーとして、Java側から次のように開始しているListActivityを使用しています。
Intent myIntent = new Intent(this, FileChooser.class);
startActivity(myIntent);
このListActivityの実行中、NDKスレッドは、ユーザーがファイルを選択し、を使用してListActivityを閉じるのを待ちます。
ALooper_pollAll();
イベントがNDKスレッドをウェイクアップするたびに、JNIを使用してJava側を呼び出し、ListActivityがまだ開いているかユーザーによって閉じられているかを示すフラグをチェックします。ListActivityのonDestroy()メソッドには、次のコードがあります。
@Override
protected void onDestroy() {
super.onDestroy();
if(isFinishing()) listActivityDone = true;
}
私の問題は、ユーザーがListActivityの[戻る]ボタンを押すと、NDKスレッドが正しくウェイクアップされることですが、残念ながら、NDKスレッドがウェイクアップされた後にonDestroy()が呼び出されるため、NDKスレッドが正しい値を取得しません。フラグ「listActivityDone」の。NDKスレッドがウェイクアップされても、NDKスレッドがウェイクアップされた直後にonDestroy()が呼び出されるため、「listActivityDone」はまだFALSEです。
したがって、この問題を解決するために必要なのは、フラグ「listActivityDone」をTRUEに設定した後、NDKスレッドをもう一度ウェイクアップすることです。誰かがこれをどのように達成できるか知っていますか?
もちろん、JavaからC関数を呼び出してからALooper_wake()を呼び出すこともできますが、Java側からNDKスレッドをウェイクアップするためのより良いバージョンがあることはほぼ間違いありません。何か案は?
ご協力いただきありがとうございます!