Жизненный цикл расширения службы уведомлений

У меня есть вопрос о жизненном цикле расширения службы уведомлений, я искал, но не могу найти подходящий ответ на свой вопрос. Вопрос в том, что происходит, когда приходит новое уведомление, когда старое уведомление находится в обработке (еще не называется contentComplete)?

Судя по моему тестированию, он завершит старый процесс и начнет новую обработку с новым уведомлением, и пользователь пропустит старое уведомление со всеми данными, которые еще не сохранены. Это правда?


person Tiến Nguyễn Hữu    schedule 25.06.2020    source источник
comment
У меня не было возможности это проверить. Зная, что ОС дает вам 30 секунд, прежде чем убьет ваше расширение службы, я не уверен, верен ли мой ответ. Вы можете легко проверить это, замедлив скорость сети вашего телефона и предоставив ему большое изображение для загрузки, а затем крошечное изображение для загрузки и оценки поведения.   -  person Honey    schedule 13.07.2020
comment
Я знаю ограничение в 30 секунд, но я спрашиваю о другом, пожалуйста, прочтите мой вопрос еще раз.   -  person Tiến Nguyễn Hữu    schedule 15.07.2020
comment
Я только что кое-что заметил. Когда я пытался использовать приложение Xcode к процессу, я увидел, что у меня есть ДВА процесса для моего расширения службы уведомлений. Итак, я теперь предполагаю, что ОС запускает новый процесс   -  person Honey    schedule 11.03.2021
comment
@ TiếnNguyễnHữu - Вы когда-нибудь разбирались, в чем дело? Я имею в виду поведение NSE, когда старое уведомление все еще обрабатывается (contentHandler еще не вызвано), и мы получаем новое уведомление?   -  person user2606782    schedule 30.03.2021
comment
@ user2606782, как я уже сказал в своем сообщении, он завершит старый процесс и запустит новый процесс с новым уведомлением, но я не уверен, потому что об этом нет документа.   -  person Tiến Nguyễn Hữu    schedule 02.04.2021


Ответы (1)


Я не совсем уверен, но на основании найденного кода расширения службы уведомлений Signal здесь, то, что вы говорите, правильно. Они решают это следующим образом:

// The lifecycle of the NSE looks something like the following:
//  1)  App receives notification
//  2)  System creates an instance of the extension class
//      and calls this method in the background
//  3)  Extension processes messages / displays whatever
//      notifications it needs to
//  4)  Extension notifies its work is complete by calling
//      the contentHandler
//  5)  If the extension takes too long to perform its work
//      (more than 30s), it will be notified and immediately
//      terminated
//
// Note that the NSE does *not* always spawn a new process to
// handle a new notification and will also try and process notifications
// in parallel. `didReceive` could be called twice for the same process,
// but will always be called on different threads. To deal with this we
// ensure that we only do setup *once* per process and we dispatch to
// the main queue to make sure the calls to the message fetcher job
// run serially. 

Убедитесь, что вы видите остальную часть их кода

person Honey    schedule 01.07.2020
comment
При отладке я иногда вспоминаю, что в Xcode у меня было 2 разных идентификатора процесса, к которым я мог присоединиться. Это заставляет меня думать, что iOS иногда запускает новый процесс. Хотя я не знаю когда - person Honey; 22.05.2021