IOS 13 — использование BGTaskScheduler не всегда работаетIOS

Программируем под IOS
Ответить
Гость
 IOS 13 — использование BGTaskScheduler не всегда работает

Сообщение Гость »


Проблема: Я хочу запустить простую функцию через 5 секунд после того, как приложение перейдет в фоновый режим.

Мне пришлось реализовать BGTaskScheduler для поддержки iOS 13. Старая реализация BackgroundTask работает на старых версиях iOS.

Я добавил фоновые режимы по запросу (аксессуары BLE отмечены галочкой, потому что в этой функции мы выполняем небольшую операцию BLE):


Изображение


Затем я подготовил Info.plist в соответствии с документацией (Идентификатор поддельный только для вопроса StackOverflow):


Изображение


Прежде чем didFinishLaunchingWithOptions завершится, я регистрирую свою BackgroundTask:

if #available(iOS 13.0, *) { BGTaskScheduler.shared.register(forTaskWithIdentifier: "com.example.MyID", используя: .global()) { (task) в print("Моя фоновая задача СЕЙЧАС выполняется!") Task.expirationHandler = { Task.setTaskCompleted(успех: правда) } } } Теперь, когда приложение запускает метод didEnterBackground, я отправляю BackgroundTaskRequest:

if #available(iOS 13.0, *) { делать { let request = BGAppRefreshTaskRequest (идентификатор: «com.example.MyID») request.earliestBeginDate = Calendar.current.date(byAdding: .секунда, значение: 5, до: Дата()) попробуйте BGTaskScheduler.shared.submit (запрос) print("Отправленный запрос задачи") } ловить { print("Не удалось отправить BGTask") } } Проблема в том, что это ОЧЕНЬ противоречиво. Apple гарантирует, что задача не будет выполнена раньше указанной даты, но не гарантирует, что она будет выполнена в точное время (меня устраивает с небольшой задержкой). Однако, когда я запускал приложение, оно не работало в 100% случаев, независимо от того, предоставлял ли я задержку запроса задачи (используя EarlyBeginDate), поэтому сначала оно выполнялось через 7 секунд (вместо 5), в следующий раз, когда я отправил на выполнение задачи ушло 26 секунд, в третий раз никогда не произошло закрытия.

Я неправильно реализую BackgroundTask? Я обыскал весь Интернет, но не нашел ни у кого такой проблемы.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»