Назначьте приоритет планированию перезапуска аварийной службы Android

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

Обычно перезапуск службы занимает от 15 до 45 секунд. Есть ли способ расставить приоритеты или запустить эту услугу раньше, чем другую.


person dcanh121    schedule 07.02.2012    source источник


Ответы (2)


Ваша служба давно работает? Если это так, попробуйте избавиться от него и запускайте его только тогда, когда это необходимо. Службы Android не предназначены для работы в качестве демона, они предназначены для работы в качестве недолговечных рабочих в фоновом режиме, когда не требуется взаимодействие с пользователем и интерфейс.

Большинство служб типа «Я просто сижу» могут слушать намерения вещания и таким образом быть хорошим гражданином.

Еще один момент: если ваша служба уже работает на короткое время и активен убийца задач, это просто: это проблема пользователей, а не ваша вина. Системе не нужны убийцы задач, и вам не следует о них заботиться. Пользователь должен знать, что использовать их - вредно.

person Luminger    schedule 17.02.2012
comment
Моя - Другое дело. Я считаю, что мне нужно добавить сообщение, чтобы добавить свое приложение в список игнорирования диспетчера задач. - person dcanh121; 18.02.2012

Я предполагаю, что это решение немного грязное, но вы можете использовать новую службу, которая начинается с START_STICKY, и установить для всех других служб значение START_NOT_STICKY.

Затем вы можете использовать новую службу для запуска всех других служб (хотя это необязательно). На самом деле это простая реализация, поскольку вы можете передать все намерение запускаемой службе.

Затем вы можете добавить широковещательную рассылку для OnDestroy() всех служб, чтобы сообщить новой службе, что одна из старых была отключена системой. Вы также можете передать старое начальное намерение через OnDestroy(), чтобы оно было перезапущено.

В случае, если ваша новая служба будет убита, вы можете после перезапуска проверить, не была ли убита какая-либо из других служб, а затем назначить приоритет перезапуску.

person Force    schedule 12.02.2012