私は Android 開発の初心者です (C/C++、Win32 の世界から来ました)。
さまざまな種類のコールバック (システム イベント、タイマー) を処理するシングル スレッド サービスを作成しようとしています。
私が必要としているのは、モーダル メッセージ処理ループの (一種の) エミュレーションです。つまり、特定の基準が満たされるまで待機する関数を呼び出せるようにしたいと考えています。ただし、待機中、スレッドはすべてのイベントを「バックグラウンドで」処理する必要があります。実際、私たちが待っている条件は、コールバックの 1 つによってトリガーされます。
さらに、これらの「モーダルメッセージ処理ループ」はネストされている場合があります。つまり、1 つの基準を待っている間に、コールバック内から別のメッセージ処理ループを実行して、別の基準を待機する必要がある場合があります。
そして、私はマルチスレッドを望んでいません。すべてをシングル スレッド内で処理する必要があります。
ドキュメントで見つけたものから、必要なものに最も近いのはHandler.getLooper().loop()
、ループを実行したり、Handler.getLooper().quitSafely()
ループの中断をトリガーしたりするために使用することです。
ただし、ドキュメントはやや混乱しています。この関数を再帰的に呼び出すことが許可されているかどうかは不明です。また、quitSafely()
ループ後に再度使用できるかどうかも不明です。ドキュメントには、quit()
実際にルーパーに対して呼び出される最後の関数であると記載されていますが、その後は使用できなくなりますが、次のquitSafely()
ように記載されています。
期限が未来の保留中の遅延メッセージは、ループが終了するまで配信されません。
ループが終了した後、再び使用できるということですか?
そうでない場合、利用可能な他のオプションは何ですか? メッセージループを明示的に制御できますか? Win32 のGetMessage
/に似たものはありますか?DispatchMessage