我正在尝试使用Evernote的android作业来安排一个定期作业每15分钟运行一次。问题是作业运行 2-3 次,然后它不会每 15 分钟运行一次。基本上在 8 小时内,当设备闲置时,它几乎运行了 10-11 次。是不是我做错了什么。我的工作的唯一要求是应该连接已连接的网络。
android-job库是否在某种程度上保证了该作业将运行?这是我的工作代码
public class TestNetworkJob extends Job {
public static final String TAG = "TestNetworkJob";
@NonNull
@Override
protected Result onRunJob(Params params) {
Timber.i("onRunJob");
RetrofitUtils.getInstance().postSlack("TestCall: " + DateTimeUtils.getLocalizedDateTimeString(System
.currentTimeMillis()));
return Result.SUCCESS;
}
public static JobRequest buildJobRequest() {
return new JobRequest.Builder(TAG)
.setUpdateCurrent(true)
.setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
.setPeriodic(TimeUnit.MINUTES.toMillis(15))
.build();
}
}
基本上在 8 小时内,当设备闲置时,它运行了近 10-11 次
这听起来像标准的打瞌睡模式行为,您将在Android 6.0 +设备上遇到这种情况。
我认为这就是使用作业调度程序 API 的全部意义所在
哦,$DEITY
,不。使用JobScheduler
(或周围的包装器(背后的要点是对电池友好。
那么我们如何确保作业每 15 分钟运行一次呢?
一般来说,你不会。
Google 希望您停止轮询并切换到 Firebase Cloud Messaging,以获取服务器端推送消息。欢迎您在AlarmManager
上尝试setAndAllowWhileIdle()
/setExactAndAllowWhileIdle()
。但是,总的来说,后台处理战争意味着定期进行后台工作充其量是困难的。