android4.4 定时任务,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分钟执行一次,我测试过,不是很准确。

f0e223eb181a302f0f676e07e04333fd.png

如果这个HTTPwork是用Kotlin写的:

class Httpwork:work(){//这里的work()已经过时

Override fun dowork():Result{

reutrn Result.SUCCESS

}

}

---------------过时后应该用这个--------------

class aaa(context: Context,wp:WorkerParameters):Worker(context,wp){

override fun doWork(): Result {

return Result.SUCCESS

}

}

复制代码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值