首页 > 解决方案 > Schedule tasks for later

问题描述

What I have :

An application with two tabs, one for upcoming deliveries and one for past deliveries. I fetch the upcoming deliveries in a SQLite database where validity date is upper than current date and vice-versa for past deliveries (update ui of the two list).

What I want :

Each deliveries has a validity date, and if a delivery pass his validity date, I would like that it go in the past delivery tab.


Further information :


Is there an utility class in android sdk (or java) to achieve this kind of job ?

标签: android

解决方案


第1部分


如果安排在后台工作以更新表格等的作业是您想要的,下面是答案:

我的建议是使用 EverNote 的“Android-Job”库。这个库与“JobScheduler”和“AlarmManager”做同样的事情,但是AndroidJobs 库会为你处理API 版本问题,所以你可以配置你的任务应该在什么时候执行。IE。InternetAvailable = true , interval = 5 mins &charging =true 等(这是伪代码,但它类似于他们的 api)

他们的 api 易于使用,让您可以安排任务,而不必担心 SDK 版本和使用多个 Android API 来做同样的事情。

这是 gitHub 链接:https ://github.com/evernote/android-job

第2部分


每个交货都有一个有效期,如果交货超过了他的有效期,我希望它进入过去的交货选项卡。

如果您只想更新 UI 而不更改表中的任何内容,则不需要使用调度程序和警报管理器(或 Android-Job 库)完成的计划任务。

您可以做的是在您的 Activity 中有一个处理程序线程,每 5 秒执行一次(您可以更改时间)。

在下面的代码中,带有选项卡的活动启动了一个 Handler 任务,该任务每 5 秒运行一次,并且在任务运行时,它会告诉您的片段检查它的数据。因此,每个片段现在可以每 5 秒检查一次它们拥有的数据是否正确并重绘。

例如:

import android.os.Handler;
MyActivity extends Activity {

  private UpcomingDeliverFragment UpcomingFragment;
  private PastDeliverFragment pastFragment;

  private Handler handler = new Handler()

  private Runnable runnable = new Runnable() {
    @Override
    public void run() {
            UpcomingFragment.checkDataSet();
            pastFragment.checkDataSet();
            startHandler(); // so the task runs again after 5 secs
    }
  };

  private onResume() {
   startHandler();
  }

  private onPause() {
   stopHandler(); // very important
  }


   private fun startHandler() {
      handler.postDelayed(runnable, 5000);
   }      

   private fun stopHandler() {
     handler.removeCallbacks(runnable);
   }

}

推荐阅读