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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值