android - 如何在特定时间从 Activity 运行 AsyncTask?

标签 android asynchronous android-asynctask

我在 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/

相关文章:

java - 我想以 2 秒的间隔从谷歌地图上的 arrayList 添加标记

android - 当用户向下滚动到列表末尾时,如何在 Cwac-Endlessadapter 中设置加载列表项的限制

node.js - 在 Node.js 中使用 Promise 会使 Node 同步吗?

c# - 使用 async/await 时是否需要使字段线程安全?

objective-c - 返回零长度数据的 NSURLConnection

android - ProgressDialog 是否可绘制? GIF 什么的?

java - 使用 Eclipse 的 Android 项目给出错误 : Cannot switch on a value of type String for source level below 1. 7

android - Android Lint 是否会在某处缓存旧结果,如果是,我该如何清除它?

android - Notification.Builder(context) 已弃用 Android O

android - 使用 ViewPager 时如何处理 ActionBarActivity Fragments 中的 AsyncTask?