2014-12-16 4 views
2

Есть ли способ установить приоритет службы android? Я хочу запустить службу в фоновом режиме после разрушения основной активности App. Поэтому я возвращаю «START_REDELIVERY_INTENT» из своего сервиса. Но перезапуск службы занимает некоторое время (около 1-3 минут). Я хочу перезапустить службу мгновенно. Есть ли способ установить приоритет службы android.Как установить приоритет службы android?

FYI, я создаю сервис, используя startService и передавая объект через aim.putExtra().

Ниже снимок взят из настройки/приложения/запуска приложений на моем устройстве Android, которая показывает, что приложение перезапускается ... Мое приложение в режиме реального времени конкретно, поэтому я хочу, чтобы перезапустить его немедленно ...

enter image description here

+0

Вы проверили [это] (http://stackoverflow.com/a/3622139/2591002)? –

ответ

2

Вы не можете контролировать поведение Service, поскольку оно зависит от ОС и имеющихся ресурсов. Тем не менее, для постоянно работающего фонового сервиса я предлагаю вам вернуть START_STICKY - который пытается изо всех сил повторно запустить службу после ее уничтожения по каким-либо причинам.

+0

Но мне нужно передать объект на свое обслуживание, и только возможный способ передать ранее достигнутое намерение (во время desroying main activity) - «START_REDELIVER_INTENT» (по моим сведениям) ... Есть ли другое решение? – doga

+0

Другие способы сделать это - использовать serializable и записывать состояние объекта, но мой объект имеет класс «BluetoothDevice», который я не могу сериализовать ... единственный способ сериализации - сохранить адрес устройства и имя устройства, а также искать и сопоставлять его при перезапуске ... Так что будет так много проблем синхронизации и ограничений по времени ... Я ищу более простой способ ... Если у вас есть? Thanx заранее :) – doga

+0

BluetoothDevice реализует Parcelable, поэтому вы можете маршализовать его данные в байтах и ​​можете повторно использовать его позже после реконструкции. Однако, имея дело с BluetoothDevice, вы можете просто сохранить адрес и имя - как вы так сказали. Иногда есть простые решения проблемы, которые мы просто не замечаем. – waqaslam

2

Единственный способ увеличить приоритет обслуживания в этом случае - сделать его foreground service.

2

Приоритет зависит от типа компонента и текущего приложения, которое пользователь использует. Наивысший приоритет имеет текущий Activity, который отображается пользователю и всем foreground services. У служб на переднем плане должно быть уведомление, которое нельзя отклонить. Чтобы создать службу переднего плана, вы должны вызвать метод startForeground(...) из самого Service, передающий идентификатор уведомления и сам объект Notification. Вы можете использовать идентификатор, если хотите обновить уведомление позже.

Я рекомендую вам сделать service bound и связать вашу деятельность с сервисом. Таким образом, вы можете запустить и остановить службу в своих методах onResume и .

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