Фоновая служба и обновления пользовательского интерфейса и реализация WAL
В моем приложении я запускаю службу в 12 часов каждый вечер с помощью будильника, все работает как положено.
У меня есть три вкладки "Фрагмент", каждая вкладка имеет вид списка, при щелчке элемента списка отображается подробный вид.
Если пользователь откроет мое приложение, скажем, в 11:59 (до того, как служба обновит базовые данные из базы данных), он получит данные в виде списка, но когда часы пробьют 12, моя обработка начнется, и база данных будет заблокирована (у меня есть реализована эксклюзивная блокировка на БД во время работы службы для предотвращения вмешательства нескольких потоков), когда пользователь нажимает на строку списка, в подробном представлении есть пустые поля и это правильно, так как БД заблокирована и в данный момент обновляется.
Как мне избежать этой ситуации? Я попытался показать диалоговое окно загрузчика, проверив, запущен ли мой сервис на вкладке Фрагмент. Я могу правильно отобразить это диалоговое окно, но мне трудно его закрыть.
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
}
Но мне интересно, как прекратить это из фонового процесса. Любые идеи, что я могу сделать?
Второй способ сделать это - включить запись в журнал впереди, было бы замечательно, если бы кто-нибудь помог мне найти хорошие советы по внедрению WAL в Android.