Xamarin iOS: BackgroundTask,我是否需要将任务对象设置为无效
Xamarin iOS: BackgroundTask, Do I need to set task object to invalid
我正在使用后台任务。该任务工作正常,但会在某个时候强制关闭。我有测试应用程序并将其打开整个下午,如果我删除代码中的后台任务,则不会发生崩溃。
仔细看了下,大概是漏掉了一行无效赋值任务对象的代码。
var siteId = Settings.CurrentSiteId;
if (siteId > 0 && !(new EntityBLL().IsInitial(siteId)))
{
var task = nint.MinValue;
task = UIApplication.SharedApplication.BeginBackgroundTask("bgEntityDownload", () =>
{
ServerEntity.TerminateAutoDownload(true);
UIApplication.SharedApplication.EndBackgroundTask(task);
task = UIApplication.BackgroundTaskInvalid;
completionHandler?.Invoke(UIBackgroundFetchResult.NewData);
});
AppLogger.Instance.AddLog(AppLogLevel.Information,
nameof(TimerDownload),
nameof(DownloadEntityFromServer),
"Background download starts", "");
var result = await ServerEntity.AutoDownload(siteId);
UIApplication.SharedApplication.EndBackgroundTask(task);
task = UIApplication.BackgroundTaskInvalid;
completionHandler?.Invoke(UIBackgroundFetchResult.NewData);
}
这里的行:
var result = await ServerEntity.AutoDownload(siteId);
UIApplication.SharedApplication.EndBackgroundTask(task);
task = UIApplication.BackgroundTaskInvalid;
任务完成后是否需要UIApplicaition.BackgroundTaskInvalid行
这不是必需的,但允许系统将其资源用于不同进程的良好做法。您的后台任务将在 180 秒后强制终止。
我正在使用后台任务。该任务工作正常,但会在某个时候强制关闭。我有测试应用程序并将其打开整个下午,如果我删除代码中的后台任务,则不会发生崩溃。
仔细看了下,大概是漏掉了一行无效赋值任务对象的代码。
var siteId = Settings.CurrentSiteId;
if (siteId > 0 && !(new EntityBLL().IsInitial(siteId)))
{
var task = nint.MinValue;
task = UIApplication.SharedApplication.BeginBackgroundTask("bgEntityDownload", () =>
{
ServerEntity.TerminateAutoDownload(true);
UIApplication.SharedApplication.EndBackgroundTask(task);
task = UIApplication.BackgroundTaskInvalid;
completionHandler?.Invoke(UIBackgroundFetchResult.NewData);
});
AppLogger.Instance.AddLog(AppLogLevel.Information,
nameof(TimerDownload),
nameof(DownloadEntityFromServer),
"Background download starts", "");
var result = await ServerEntity.AutoDownload(siteId);
UIApplication.SharedApplication.EndBackgroundTask(task);
task = UIApplication.BackgroundTaskInvalid;
completionHandler?.Invoke(UIBackgroundFetchResult.NewData);
}
这里的行:
var result = await ServerEntity.AutoDownload(siteId);
UIApplication.SharedApplication.EndBackgroundTask(task);
task = UIApplication.BackgroundTaskInvalid;
任务完成后是否需要UIApplicaition.BackgroundTaskInvalid行
这不是必需的,但允许系统将其资源用于不同进程的良好做法。您的后台任务将在 180 秒后强制终止。