我正在使用最新的 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");
}
这总是报告“计划好的”