Job Scheduler вылетает приложение - PullRequest
0 голосов
/ 05 октября 2018

Я хотел бы реализовать 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 работает нормально, пока приложение работаетне удаляется и не закрывается полностью.Я действительно не знаю, почему происходит сбой приложения, когда оно перезапускается после того, как оно было удалено из списка последних приложений.

Заранее спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...