В моем приложении служба работает в фоновом режиме, периодически проверяя, происходит ли событие (у нас больше заданной отметки времени). Если событие произошло, оно устанавливает логическое значение (DisplayStatus
) в общих настройках.
В моем MainActivity.onStart()
я проверяю значение этого логического значения и, основываясь на его значении, я либо отображаю, либо скрываю некоторые ImageViews. Поэтому я ожидаю, что как только служба установит DisplayStatus в значение true, я смогу покинуть свое приложение с помощью кнопки «Домой» (чтобы оно осталось в памяти), а затем, если я перезапущу его и увижу изображения. Хотя этого не происходит.
Я точно знаю, что мой фоновый сервис работает нормально, так как он также отправляет уведомление, когда он устанавливает логическое значение в true, но ImageViews отображаются только тогда, когда я удаляю приложение из памяти и перезапускаю его. Если я просто покину приложение и перезапущу его, изображения не отобразятся.
После поиска в теме, некоторые предлагают использовать .commit () вместо .apply (), когда я записываю логическое значение для общих настроек, но в моем случае это не имеет никакого значения, приложение необходимо стереть из памяти для отображения изображений.
MainActivity:
protected void onStart() {
super.onStart();
if (shared_preferences.getDisplayStatus(this)) {
DisplayImages();
} else {
HideImages();
}
}
Мой сервис:
private void CheckIfNotification() {
if (System.currentTimeMillis() > GetTime.GetTimeInMillis(Globals.STARTDATE)) {
if (!shared_preferences.getDisplayStatus(ctx)) {
shared_preferences.setDisplayStatus(ctx, true);
myNotification(ctx, "This a notification");
}
} else {
shared_preferences.setDisplayStatus(ctx, false);
}
}
Мой класс для установки / получения общих настроек:
public static void setDisplayStatus(Context ctx, boolean displayStatus) {
ctx.getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit()
.putBoolean("DisplayStatus", displayStatus).commit();
}
public static boolean getDisplayStatus(Context ctx) {
return ctx.getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE)
.getBoolean("DisplayStatus", false);
}