私のアプリケーションでは、アラームを使用して毎晩 12 時にサービスを実行しています。すべてが意図したとおりに機能します。
3 つのフラグメント タブがあり、各タブにはリストビューがあり、リスト項目をクリックすると詳細ビューが表示されます。
ユーザーがたとえば 11:59 (サービスがデータベースから基になるデータを更新する前) にアプリを開くと、リスト ビューにデータが表示されますが、時計が 12 を打つと、処理が開始され、データベースがロックされます (私が持っている複数のスレッドが干渉するのを防ぐために、サービスの実行中に db に排他ロックを実装しました) ユーザーがリスト行をクリックすると、詳細ビューに空白のフィールドが表示され、DB がロックされて現在更新されているため、正しく表示されます。
この状況を回避するにはどうすればよいですか? [フラグメント] タブからサービスが実行されているかどうかを確認して、ローダー ダイアログを表示しようとしました。このダイアログは正しく表示できますが、終了するのが難しいと感じています。
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getActivity().getSystemService(getActivity().ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("com.xxx.xxx.MyService".equals(service.service.getClassName())) {
return true;
}
}
return false;
}
それから:
if(isMyServiceRunning()){
Show dialog logic here
}
しかし、バックグラウンドプロセスから終了する方法が気になります。私にできることはありますか?
これを行う 2 番目の方法は、先行書き込みログを有効にすることです。誰かが Android での WAL の実装に関する良い情報を見つけるのを手伝ってくれたら素晴らしいでしょう。