Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android设备关闭时运行我的线程_Android_Multithreading_Date_Utc_Runnable - Fatal编程技术网

如何在android设备关闭时运行我的线程

如何在android设备关闭时运行我的线程,android,multithreading,date,utc,runnable,Android,Multithreading,Date,Utc,Runnable,我开发了一个每天运行一次的应用程序。因为我想在一个文件中更新一个日期(所以需要每天更新一次)。 在Handler的帮助下,我做到了这一点: final Runnable mUpdateResults = new Runnable() { public void run() { try{ FileInputStream fia = openFileInput("ActualDate"); S

我开发了一个每天运行一次的应用程序。因为我想在一个文件中更新一个日期(所以需要每天更新一次)。
在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文件中

问题:代码工作正常,除非设备关闭,所以线程在此期间停止。我怎样才能克服这个问题


非常感谢您的各种建议。提前感谢。

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

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

除此之外,还要将系统当前日期存储为lastUpdateDate

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

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

将此添加到文件中的myTodayDate

现在,将这个新日期与前面提到的当前系统一起存储。这可能会帮助您克服日期同步问题


其实只是一个想法!如果有帮助,请告诉我。

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

好主意!!让我试试@R.J-嘿,我需要你的帮助,可运行线程会在3-4天后自动终止…如何确保它至少持续15天..?我不想处理任何UI…只是文件应该更新到时间,包括设备关闭的时间@NilayOnAndroid:考虑一下,如果手机关机,没有电源,你会怎么做。然后这样做。@NilayOnAndroid如果你将它与
BOOT\u COMPLETED
intent filter相结合,RJ的答案是检查最后更新的日期,它会工作得最好。@danada嘿,我需要你的帮助,可运行的线程在3-4天后会自动终止…如何确保它至少持续15天。。??我可以用AlarmManager来实现这一点吗?@NilayOnAndroid的想法是,您不需要将其作为可运行线程来运行,而是更像是一个计划的事情。使用AlarmManager,您可以安排将来发生的任务。您仍然需要执行RJ建议的检查,以计算自上次引导以来的天数。