Я хотел бы реализовать JobScheduler, который является отличной заменой классическому фоновому сервису.Я попытался протестировать простой сценарий, когда планировщик заданий запускается, когда приложение переходит в фоновый режим или закрывается.Планировщик заданий отменяется в тот момент, когда приложение начинает открываться или возобновляться.Для этого я написал следующий код в классе приложения
protected override void OnStart()
{
var message = new StopLongRunningTaskMessage();
MessagingCenter.Send(message, "StopLongRunningTaskMessage");
}
protected override void OnSleep()
{
var message = new StartLongRunningTaskMessage();
MessagingCenter.Send(message, "StartLongRunningTaskMessage");
}
protected override void OnResume()
{
var message = new StopLongRunningTaskMessage();
MessagingCenter.Send(message, "StopLongRunningTaskMessage");
}
Метод OnCreate в классе MainActivity имеет следующий код:
MessagingCenter.Subscribe(this, "StartLongRunningTaskMessage", message =>
{
if (!IsJobServiceOn())
{
_jobScheduler = (JobScheduler)GetSystemService(JobSchedulerService);
var extra = new PersistableBundle();
extra.PutInt("LoopCount", 20);
var javaClass = Java.Lang.Class.FromType(typeof(MyFirstservice));
var compName = new ComponentName(this, javaClass);
var jobInfo = new JobInfo.Builder(1, compName)
.SetPersisted(true)
.SetExtras(extra)
.SetPeriodic(900000)
.Build();
var result = _jobScheduler.Schedule(jobInfo);
}
});
MessagingCenter.Subscribe<StopLongRunningTaskMessage>(this, "StopLongRunningTaskMessage", message => {
if (IsJobServiceOn())
_jobScheduler.Cancel(1);
});
}
private bool IsJobServiceOn()
{
JobScheduler scheduler = (JobScheduler)GetSystemService(JobSchedulerService);
if (scheduler.GetPendingJob(1) != null)
return true;
else
return false;
}
JobScheduler работает нормально, пока приложение работаетне удаляется и не закрывается полностью.Я действительно не знаю, почему происходит сбой приложения, когда оно перезапускается после того, как оно было удалено из списка последних приложений.
Заранее спасибо за помощь.