如何在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建议的检查,以计算自上次引导以来的天数。