Android WorkManager定时重复任务

#需求 :需要定时的调用接口,来检测后台数据的变化。
看到文章说workmanager是今年谷歌推荐了,然后我也是新手,没试过AlarmManager和JobScheduler,就想着试试workmanager。
##在做之前我当然是先百度一波
一些基本概念和一些变量的意思,我在这里就不说了,大家百度一搜,很多文章都有讲解。
先上代码
首先是需要做的事情放在哪里?

public class HTTPwork extends Worker {
    @NonNull
    @Override
    public Result doWork() {
        //TODO 需要在任务中执行的业务逻辑
        Log.e("SimpleWorker", "doWork哈哈哈哈");
        return Result.SUCCESS;
    }
}  
复制代码

然后:

 val constraints = Constraints.Builder()
                .setRequiredNetworkType(NetworkType.CONNECTED)  // 网络状态
                .setRequiresBatteryNotLow(true)                 // 不在电量不足时执行
                .setRequiresCharging(true)                      // 在充电时执行
                .setRequiresStorageNotLow(true)                 // 不在存储容量不足时执行
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            constraints.setRequiresDeviceIdle(true) // 在待机状态下执行,需要 API 23
        }else{ }
        val workRequest =  PeriodicWorkRequest.Builder(HTTPwork().javaClass,MIN_PERIODIC_INTERVAL_MILLIS,TimeUnit.MILLISECONDS)
               .setConstraints(constraints.build())//
               .build();
       WorkManager.getInstance().enqueue(workRequest);//这串代码是加入任务队列的意思
复制代码

注意在setConstraints时,后面的constraints要加build()。我看到很多的文章都没有加,导致类型不一样会报错。
MIN_PERIODIC_INTERVAL_MILLIS和TimeUnit.MILLISECONDS是间隔15分钟执行一次,我测试过,不是很准确。

 

运行结果

 


如果这个HTTPwork是用Kotlin写的:

 

class Httpwork:work(){//这里的work()已经过时
    Override fun dowork():Result{
        reutrn Result.SUCCESS
    }
}
---------------过时后应该用这个--------------
class Httpwork(context: Context,wp:WorkerParameters):Worker(context,wp){
    override fun doWork(): Result {
        return Result.SUCCESS 
    }

}
复制代码

但是这样用之后,定时反而更不准确了,第一次运行时重复一次性运行5到6次,我也没找到原因。


作者:代码还没写完啊
链接:https://juejin.im/post/5bbd61ad6fb9a05d27792536
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(android,安卓)