2012-02-07 4 views
5

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

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

ответ

0

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

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

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

+0

Шахта - это «Другое дело». Я считаю, что я должен добавить сообщение, чтобы добавить мое приложение в список игнорирования диспетчера задач. – dcanh121

0

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

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

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

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

Смежные вопросы