1

我正在使用最新的 Xamarin Forms 3.1.0,并且正在尝试安排每天将信息发送回服务器。我将 JobSchedulerService 与 SetPeriodic(24 * 3600 * 1000) 一起使用,它引用了下面的 JobService。

这开始并运行正常,但会继续重新安排并以越来越小的间隔运行(正如您可能期望的那样,失败的任务会以越来越长的间隔重新安排)。

但是,logcat 中没有任何内容表明发生了错误。

Logger 语句只是试图跟踪正在发生的事情,但我总是看到“FINISHED:”语句,而从来没有看到“FAULTED”消息,所以任务似乎没有失败我做错了什么?

public class AdherenceReportingJob : JobService
{
    static readonly string logClassName = typeof(AdherenceReportingJob).ToString();

    public override bool OnStartJob(JobParameters jobParams)
    {
        Logger.Audit(logClassName, "START");
        Task.Factory.StartNew(() =>
        {
            bool updateRan = false;
            updateRan = AdherenceCalculator.AdherenceReporting();

            // Have to tell the JobScheduler the work is done. 
            JobFinished(jobParams, false);
            Logger.Audit(logClassName, "FINISHED:" + updateRan);

        }).ContinueWith(t =>
        {
            Logger.Error(logClassName, "FAULTED");
            Logger.Error(logClassName, t.Exception.InnerException);
            JobFinished(jobParams, true);
        }, TaskContinuationOptions.OnlyOnFaulted);

        // Return true because of the asynchronous work
        return true;
    }

    public override bool OnStopJob(JobParameters jobParams)
    {
        // we don't want to reschedule the job if it is stopped or cancelled.
        Logger.Audit(logClassName, "START");
        return false;
    }

}

作业安排使用:

        var javaClass = Java.Lang.Class.FromType(typeof(AdherenceReportingJob));
        var componentName = new ComponentName(Application.Context, javaClass);
        var jobBuilder = new JobInfo.Builder(ADHERENCE_REPORT_JOB, componentName);
        jobBuilder.SetPeriodic(App.OneDay);
        jobBuilder.SetRequiredNetworkType(NetworkType.Any); // Need network to report back
        var jobInfo = jobBuilder.Build();

        var jobScheduler = (JobScheduler) Application.Context.GetSystemService(JobSchedulerService);

        var scheduleResult = jobScheduler.Schedule(jobInfo);

        if (JobScheduler.ResultSuccess == scheduleResult)
        {
            Logger.Debug(logClassName, "Scheduled OK");
        }
        else
        {
            Logger.Error(logClassName, "Scheduled FAILED");
        }

这总是报告“计划好的”

4

0 回答 0