服务和活动中的共享首选项

时间:2019-01-22 09:03:45

标签: android sharedpreferences

在我的应用程序中,服务在后台运行,并定期检查事件是否发生(我们已经超过了给定的时间戳)。如果该事件发生,它将在共享首选项中设置一个布尔(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);
}

0 个答案:

没有答案