0

我开发了一个每天运行一次的应用程序。在那我想在一个文件中更新一个日期(所以它需要每天完成)。
我在 Handler 的帮助下使它成为可能:

final Runnable mUpdateResults = new Runnable() {
        public void run() {

            try{

                FileInputStream fia = openFileInput("ActualDate");
                StringBuffer actualContent = new StringBuffer("");
                byte[] buffer = new byte[1024];
                try {
                    while ((fia.read(buffer)) != -1) {
                        actualContent.append(new String(buffer));
                    }
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                actualDate = actualContent.toString().trim();

                SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
                Calendar c = Calendar.getInstance();
                try {
                    c.setTime(sdf.parse(actualDate));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                c.add(Calendar.DATE, 1);  
                actualDate = sdf.format(c.getTime()); 
                FileOutputStream foa = openFileOutput("ActualDate", Context.MODE_PRIVATE);
                foa.write(actualDate.getBytes());
                foa.close();

            }catch (Exception e) {
                // TODO: handle exception
                startupFunction();
            }

        }
    };

    long delay = 24*60*60*1000; // first run after a day

    long period = 24*60*60*1000; // repeat every day.

    Timer timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {

    public void run() {

        mHandler.post(mUpdateResults);
    }

    }, delay, period);

这背后的实际想法是,我希望我的应用程序有一个用户无法更改的设备独立日期。我将第一次出现的日期存储在 UTC 日期的ActualDate文件中。

问题:代码工作正常,除非设备关闭,因此线程在那个时候停止。我该如何克服这个问题。

各种建议都非常感谢。提前致谢。

4

2 回答 2

1

尝试遵循以下逻辑。它只是一个想法,这可能会有所帮助。

您的应用程序今天运行 - 因此您在文件中添加了一个条目,例如myTodayDate。这是您的应用程序特定日期。

除此之外,还要输入系统当前日期,该日期将存储为lastUpdatedDate

假设手机在接下来的 2 天内保持关闭状态。稍后,当您的应用程序运行时,您可以执行此操作。

从文件中获取lastUpdatedDate并从当前系统日期中减去它。您将获得的差异将是noOfDays=2

将此添加到文件中的myTodayDate中。

现在,存储这个新日期,以及之前所说的当前系统。这可以帮助您克服日期同步问题。

其实只是一个想法!让我知道,如果它有帮助。

于 2013-02-09T06:55:52.890 回答
1

使用AlarmManager让您的应用程序定期运行,而不是一直运行。在代码中使用延迟会浪费周期,并且由于内存管理,您的应用程序可能会被 Android 操作系统本身杀死。

于 2013-02-09T07:01:30.573 回答