即使应用程序不是 运行,如何每天更新 TextView?

How to update TextView each day even when application not running?

假设我有一个简单的日计数器应用程序,我有一个数字,每天该数字递增 1,当用户关闭应用程序时,状态将被保存。

我希望应用程序将数据存储在文件中,因此不包括数据库

使用SharedPreference保存当前日期,并计数变量, 每次应用程序检查天数差异并添加到计数变量更新上面给定的当前日期和变量

中的SharedPreference

假设,

值保存在 SharedPreference

count = system date - current date;
current date = system date;

当您在 5 天后打开应用时

count = systemdate - current date (which was 18-08-2018);

current date = system date;

如果您需要在用户打开应用程序或未打开应用程序时无动于衷地每天更新号码,您可以这样做:

用户首次启动应用程序时,您会获得当前日期(例如使用 Joda-Time

Datetime myTime = DateTime.now()

然后将其存储在某个地方,例如 SharedPreferencesRoom 数据库。

然后,每次需要显示数字时,从存储它的位置(数据库或 SharedPreferences)获取日期并计算与当前日期的差异,如下所示:

 Days days = Days.daysBetween(myTime , DateTime.now());
 int number = days.getDays();

为了保持代码的简洁性,我使用了共享偏好来存储数据和日期的毫秒数。

   int yourNumber = 0;
        SharedPreferences save_data = getSharedPreferences("app", MODE_PRIVATE);
        SharedPreferences.Editor save_edit = getSharedPreferences("app", MODE_PRIVATE).edit();


        int days = save_data.getInt("days", -1);//Get Days from the preferences


        if (days < yourNumber) {
            //opened first time; no saved data found ;so save the initial data
            save_edit.putLong("date", Calendar.getInstance().getTimeInMillis());
            save_edit.putInt("days", yourNumber);
            save_edit.commit();
        } else {
            //Already saved data found;
            long oneDayInMilliSeconds = 86400000L;
            long old_date = save_data.getLong("date", Calendar.getInstance().getTimeInMillis());
            long current_date = Calendar.getInstance().getTimeInMillis();
            long difference = (old_date + oneDayInMilliSeconds) - current_date;
            if (difference > 0) {
                //One Day Passed; Add One To previous Saved Days


                save_edit.putInt("days", save_data.getInt("days", 0) + 1);//Get Days
                save_edit.putLong("date", Calendar.getInstance().getTimeInMillis());//update the date
                save_edit.commit();
            }
        }