在我的应用程序中,服务在后台运行,并定期检查事件是否发生(我们已经超过了给定的时间戳)。如果该事件发生,它将在共享首选项中设置一个布尔(DisplayStatus
)。
在我的MainActivity.onStart()
中,我正在检查此布尔值,并根据其值显示或隐藏一些ImageView。因此,我希望一旦该服务将DisplayStatus设置为true,我就可以使用主页按钮离开我的应用程序(这样它就留在内存中)然后重新启动它就可以看到图像。不过,这不会发生。
我肯定我的后台服务可以正常工作,因为它在将布尔值设置为true时也会发送通知,但是只有当我从内存中滑动应用程序并重新启动它时,ImageViews才会显示。如果我只是离开该应用程序,然后重新启动,它将不会显示图像。
在搜索主题之后,有人建议当我将boolean写入共享首选项时使用.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);
}