From 5455404a37db1b3ee91d1c14d9819f7ffb9bf386 Mon Sep 17 00:00:00 2001 From: ARIYAMA Keiji Date: Fri, 12 Aug 2022 12:06:34 +0900 Subject: [PATCH 1/2] Improve background processes stability on iOS. --- .../DataMaintainanceBackgroundService.cs | 17 +++++++++++------ .../EventLogSubmissionBackgroundService.cs | 16 ++++++++++------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/Covid19Radar/Covid19Radar.iOS/Services/DataMaintainanceBackgroundService.cs b/Covid19Radar/Covid19Radar.iOS/Services/DataMaintainanceBackgroundService.cs index 4cb2606f9..fb14d801d 100644 --- a/Covid19Radar/Covid19Radar.iOS/Services/DataMaintainanceBackgroundService.cs +++ b/Covid19Radar/Covid19Radar.iOS/Services/DataMaintainanceBackgroundService.cs @@ -17,15 +17,19 @@ namespace Covid19Radar.iOS.Services { public class DataMaintainanceBackgroundService : AbsDataMaintainanceBackgroundService { - private const double BGTASK_INTERVAL = 24 * 60 * 60; // one day + private const int TASK_INTERVAL_IN_HOURS = 24; private static readonly string BGTASK_IDENTIFIER = AppInfo.PackageName + ".data-maintainance"; + private readonly IDateTimeUtility _dateTimeUtility; + public DataMaintainanceBackgroundService( ILoggerService loggerService, ILogFileService logFileService, - IEventLogRepository eventLogRepository + IEventLogRepository eventLogRepository, + IDateTimeUtility dateTimeUtility ) : base(loggerService, logFileService, eventLogRepository) { + _dateTimeUtility = dateTimeUtility; } public override void Schedule() @@ -36,7 +40,8 @@ public override void Schedule() { LoggerService.Info("Background task has been started."); - ScheduleBgTask(); + DateTime nextDateTime = _dateTimeUtility.UtcNow.Date.AddHours(TASK_INTERVAL_IN_HOURS); + ScheduleBgTask(nextDateTime); var cancellationTokenSource = new CancellationTokenSource(); task.ExpirationHandler = cancellationTokenSource.Cancel; @@ -77,12 +82,12 @@ public override void Schedule() LoggerService.Error("BGTaskScheduler.Shared.Register failed."); } - ScheduleBgTask(); + ScheduleBgTask(_dateTimeUtility.UtcNow); LoggerService.EndMethod(); } - private void ScheduleBgTask() + private void ScheduleBgTask(DateTime nextDateTime) { LoggerService.StartMethod(); @@ -90,7 +95,7 @@ private void ScheduleBgTask() { BGProcessingTaskRequest bgTaskRequest = new BGProcessingTaskRequest(BGTASK_IDENTIFIER) { - EarliestBeginDate = NSDate.FromTimeIntervalSinceNow(BGTASK_INTERVAL), + EarliestBeginDate = NSDate.FromTimeIntervalSince1970(nextDateTime.ToUnixEpoch()) }; LoggerService.Info($"request.EarliestBeginDate: {bgTaskRequest.EarliestBeginDate}"); diff --git a/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs b/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs index 6b63c9511..3fb7ba9c1 100644 --- a/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs +++ b/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs @@ -17,22 +17,25 @@ namespace Covid19Radar.iOS.Services { public class EventLogSubmissionBackgroundService : AbsEventLogSubmissionBackgroundService { - private const double BGTASK_INTERVAL = 24 * 60 * 60; // one day + private const int TASK_INTERVAL_IN_HOURS = 24; private static readonly string BGTASK_IDENTIFIER = AppInfo.PackageName + ".eventlog-submission"; private readonly IEventLogService _eventLogService; private readonly IEventLogRepository _eventLogRepository; private readonly ILoggerService _loggerService; + private readonly IDateTimeUtility _dateTimeUtility; public EventLogSubmissionBackgroundService( IEventLogService eventLogService, IEventLogRepository eventLogRepository, - ILoggerService loggerService + ILoggerService loggerService, + IDateTimeUtility dateTimeUtility ) : base() { _eventLogService = eventLogService; _eventLogRepository = eventLogRepository; _loggerService = loggerService; + _dateTimeUtility = dateTimeUtility; } public override void Schedule() @@ -43,7 +46,8 @@ public override void Schedule() { _loggerService.Info("Background task has been started."); - ScheduleBgTask(); + DateTime nextDateTime = _dateTimeUtility.UtcNow.Date.AddHours(TASK_INTERVAL_IN_HOURS); + ScheduleBgTask(nextDateTime); var cancellationTokenSource = new CancellationTokenSource(); task.ExpirationHandler = cancellationTokenSource.Cancel; @@ -81,7 +85,7 @@ await _eventLogService.SendAllAsync( }, cancellationTokenSource.Token); }); - ScheduleBgTask(); + ScheduleBgTask(_dateTimeUtility.UtcNow); if (result) { @@ -95,7 +99,7 @@ await _eventLogService.SendAllAsync( _loggerService.EndMethod(); } - private void ScheduleBgTask() + private void ScheduleBgTask(DateTime nextDateTime) { _loggerService.StartMethod(); @@ -103,7 +107,7 @@ private void ScheduleBgTask() { var bgTaskRequest = new BGProcessingTaskRequest(BGTASK_IDENTIFIER) { - EarliestBeginDate = NSDate.FromTimeIntervalSinceNow(BGTASK_INTERVAL), + EarliestBeginDate = NSDate.FromTimeIntervalSince1970(nextDateTime.ToUnixEpoch()), RequiresNetworkConnectivity = true }; From 3839bd94b1b0e8a151dd2f81b844d7ff56e094c2 Mon Sep 17 00:00:00 2001 From: ARIYAMA Keiji Date: Sat, 13 Aug 2022 10:39:23 +0900 Subject: [PATCH 2/2] Update Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs --- .../Services/EventLogSubmissionBackgroundService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs b/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs index 3fb7ba9c1..45babf139 100644 --- a/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs +++ b/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs @@ -46,7 +46,7 @@ public override void Schedule() { _loggerService.Info("Background task has been started."); - DateTime nextDateTime = _dateTimeUtility.UtcNow.Date.AddHours(TASK_INTERVAL_IN_HOURS); + DateTime nextDateTime = _dateTimeUtility.UtcNow.AddHours(TASK_INTERVAL_IN_HOURS); ScheduleBgTask(nextDateTime); var cancellationTokenSource = new CancellationTokenSource();