安排以后的任务

时间:2018-10-09 14:53:17

标签: android

我有什么:

一个带有两个标签的应用程序,一个用于即将交付的货物,另一个用于过去的交付。 我在有效日期高于当前日期的SQLite数据库中获取即将交付的货物,反之亦然,对于过去的交付(两个列表的更新ui)而言。

我想要什么:

每个交货都有一个有效日期,如果交货超过了他的有效日期,我希望它在过去交货标签中。


其他信息:

  • 在两个标签中添加了ViewPager,其中每个标签都包含一个Fragment和一个RecyclerView
  • 这些交付由我自己添加(通过FloatingActionButton),没有网络服务。
  • SDK版本范围为17到28

android sdk(或java)中是否有实用程序类来实现这种工作?

1 个答案:

答案 0 :(得分:1)

PART 1


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

我的建议是使用EverNote的“ Android-Job”库。 该库与“ JobScheduler”和“ AlarmManager”具有相同的功能,但是AndroidJobs库将为您解决API版本问题,因此您只需配置何时执行任务即可。 即。 InternetAvailable = true,间隔= 5分钟&充电= true等(这是伪代码,但类似于其api)

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

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

PART2


  

每个交货都有有效日期,如果交货通过   有效日期,我希望它在过去的“交付”标签中。

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

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

在下面的代码中,带有标签的活动启动一个Handler任务,该任务每5秒运行一次,在任务运行时,它告诉您的片段检查其数据。因此,每个片段现在可以每5秒检查一次它们是否具有正确的数据并重新绘制。

EG:

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);
   }

}