私が風刺される前に、メインの UI スレッドをブロックするために、シナリオは次のとおりです。
- サービスは 1 日に 1 回実行されます。完了するまでに約 15 秒かかります。重いデータベース トランザクション
- 偶然にも、ユーザーはその間にアプリを起動します
- ホーム画面はデータベースからデータを読み込みます
- しかし、データベースがロックされているため (ステップ 1)、これはエラーをスローします。
そのため、サービスが完了するまで UI スレッドを FREEZE する必要があります。UI は引き続き実行され、エラーがスローされるため、AsyncTask はありません。サービスが終了するまで「onResume」機能をスリープ状態にすることができました。しかし、その間、ユーザーに待つように指示するダイアログや、ユーザーにしっかりと座るように指示する進行状況バーを表示することはできません。
私が試したら
start onResume
if (service is running?)
show progress dialog
while the service is running, thread.sleep
dismiss progress dialog
end onResume
スレッドは正常に眠り、目覚めます。しかし、いまいましい進行状況ダイアログは onResume...再開するまで表示されません! 要するに、メイン スレッドをスリープ状態にする前にインジケーター (progressdialog またはダイアログ) を表示するにはどうすればよいですか?
サービスが再開されるまで、別のアクティビティをロードするソリューションを受け入れます。私はそれを試しましたが、以前の活動は引き続き順調に進んでいます :|