シナリオは次のとおりです。
- 2 つのアクティビティと 1 つのサービスがあります
- 最初のアクティビティは、ランディング ビュー/検索ページです。2 番目のアクティビティで検索結果が表示される
- 検索は常に内部 SQLite データベースに対して実行されます
- 定期的に (たとえば毎日) データベースをリモート ソースから更新する必要がありますが、これは長いプロセスです。
- ユーザーが更新中に検索を実行した場合、「お待ちください」進行状況アラートを表示しながら、更新が終了するまで待ちたいと思います。更新が完全に完了するまで、クエリを実行して検索結果を表示したくありません。
- データベースの更新は AlarmManager によってトリガーされ、更新の進行中に "UPDATING" ステータスをデータベースに入れるサービスによって実行されます。
- ステータスは簡単に照会できますが、待機して定期的にデータベースを再照会するにはどうすればよいですか? 私は AsyncTask を使用して検索結果を処理しています。私のひざまずいた反応は、wait() を使用したループを
AsyncTask#doInBackground
メソッドに入れることでしたが、これは危険であり、UI スレッドを制御していないため機能しませんIllegalMonitorStateException
。
この場合、適切に待機する「正しい」方法は何ですか (ステータスの更新がある場合もあります)。
PS「待機」コードをRunnableに配置し、AsyncTaskに到達する前でも実行しました。それはうまくいきます。たとえばThread.sleep(2000)
、それが安全に行う方法であるかどうかはまだわかりません。誰でも経験がありFutureTask
ますか?