【发布时间】:2019-02-17 09:49:24
【问题描述】:
我观察到一个关于周期性 JobScheduler 的问题。只要应用程序未强制关闭,它就会按预期工作。在这种情况下,JobScheduler 会被触发 3 次,而不管 Schedule() 方法仅被调用一次。就我而言,JobScheduler 在调用 OnStop() 方法时启动,并在调用 OnStart() 方法时停止。这意味着只要应用程序在后台,JobScheduler 就可以工作。
JobScheduler 内部的简化代码:
public override bool OnStartJob(JobParameters @params)
{
CancellationToken token = tokenSource.Token;
bleTask = Task.Run(async() =>
{
await ScanForDevice(@params, token);
},token);
return true;
}
public override bool OnStopJob(JobParameters @params)
{
if(bleTask != null)
{
if (bleTask.Status == TaskStatus.WaitingForActivation)
tokenSource.Cancel();
}
return false;
}
public async Task ScanForDevice(JobParameters jobParams, CancellationToken token)
{
for (int i = 0; i < 120; i++)
{
if (token.IsCancellationRequested)
{
return;
}
await Task.Delay(500); // piece of code is simulated with some delay
}
JobFinished(jobParams, false);
}
我真的不明白为什么在应用程序被强制关闭的情况下JobScheduler会执行3次。非常有趣的是,如果 OnStartJob() 返回值为 false,那么上述问题将无法重现。
【问题讨论】:
标签: c# android xamarin android-jobscheduler