【发布时间】:2011-10-04 14:49:53
【问题描述】:
我在一个我只想每周运行一次的活动中有一个 AsyncTask。我该怎么做呢?
我正在检索其中大约 7 个 URL 的列表,然后将它们放入 SharedPreference。
我只想从我的活动中每周更新和检查一次新 URL。这将在我的主要活动中。
【问题讨论】:
标签: android asynchronous android-asynctask
我在一个我只想每周运行一次的活动中有一个 AsyncTask。我该怎么做呢?
我正在检索其中大约 7 个 URL 的列表,然后将它们放入 SharedPreference。
我只想从我的活动中每周更新和检查一次新 URL。这将在我的主要活动中。
【问题讨论】:
标签: android asynchronous android-asynctask
您可以在共享首选项中保存使用异步任务时的日期。 因此,每当主活动开始时,您都可以检查当前日期和共享首选项中的日期,如果超过 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 所说,这只有在用户参加该活动时才有效。但由于 >= 检查,即使他在一个月后打开它也会起作用。但是,如果即使用户没有打开您的应用程序,您也需要这样做,您将需要查看 AlarmManager 类。
【讨论】: