我在 Activity 中有一个 AsyncTask,我只想每周运行一次。我该怎么做?
我正在检索大约 7 个 URL 的列表,然后将它们放入 SharedPreference。
我只想每周从我的 Activity 中更新和检查一次新 URL。这将在我的主要 Activity 中。
最佳答案
您可以在共享首选项中使用异步任务时保存日期。 因此,无论何时主 Activity 开始,您都可以检查当前日期和共享首选项中的日期,如果超过 7 天,您可以再次执行异步任务并将保存的日期更新为当前日期。
我相信您已经知道如何将字符串放入共享首选项并访问它们。
这只是要做什么的基本代码。您需要稍微修改一下才能让它为您工作。
private static String getToday(){
Calendar objCalendar = new GregorianCalendar(Calendar.getInstance().getTimeZone());
DateFormat objFormatter = new SimpleDateFormat("dd-MM-yyyy");
return objFormatter.format(objCalendar.getTime());
}
private static String getAfter7DaysDate(){
Calendar objCalendar = new GregorianCalendar(Calendar.getInstance().getTimeZone());
DateFormat objFormatter = new SimpleDateFormat("dd-MM-yyyy");
objCalendar.add(Calendar.DATE, 7);
return objFormatter.format(objCalendar.getTime());
}
public int daysBetween(Date d1, Date d2){
return (int)( (d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24));
}
如果你把它放在 onCreate 中
String today = getToday();
String afterSevenDate = getAfter7DaysDate();
DateFormat objFormatter = new SimpleDateFormat("dd-MM-yyyy");
try {
Log.e(today,Integer.toString(daysBetween(objFormatter.parse(today),
objFormatter.parse(afterSevenDate))));
} catch (ParseException e) {
e.printStackTrace();
}
上面的代码只是检索当前日期、7 天后的日期,并找出这 2 个日期之间的天数差异。您将需要获取保存的日期并找到 7 天后的日期,并检查当前日期之间的差异是否 >= 到 7。如果为真,则执行您的异步任务。
这是最简单的方法。
正如 JoeLallouz 所提到的,这只有在用户参加该 Activity 时才有效。但由于 >= 检查,即使他在一个月后打开,它也会起作用。但是,如果即使用户没有打开您的应用程序您也需要执行此操作,则您需要查看 AlarmManager 类。
关于android - 如何在特定时间从 Activity 运行 AsyncTask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7649776/