Запускай сервис и активность в разных процессах на андроиде - PullRequest
0 голосов
/ 22 декабря 2011

В моем приложении приведена следующая схема:

  1. Приемник вещания прослушивает действие BOOT_COMPLETED и устанавливает повторяющуюся тревогу.
  2. Тревога запускает службу через PendingIntent.
  3. Служба проверяет некоторые данные по Интернету и, когда новые данные доступны, показывает уведомление, которое выполняет действие, когда пользователь выбирает его.

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

Установка андроида: процесс отличается для службы и активность не помогает.Отладчик показывает мне, что у нас есть два разных процесса, но закрытие приложения из диспетчера задач убивает оба процесса.

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

В этом случае все работает так, как мне нужно.Но теперь у меня есть другая проблема.Два .apk файла.Я попытался найти решение для объединения двух apk в один для Маркета, но, похоже, это невозможно.Попросить пользователя установить два apk для одного не очень хорошая идея, я думаю.

Так что мой вопрос, как я могу решить эту проблему?

1 Ответ

1 голос
/ 22 декабря 2011

Когда я закрываю приложение из диспетчера задач на моем устройстве, процесс прекращается, и мой сигнал тревоги больше не работает. Таким образом, процесс останавливается до следующего перезапуска устройства.

Это хорошо. Пользователь, убивая или принудительно останавливая ваше приложение, говорит: «Я не хочу, чтобы вы снова запускались». Разработчики должны уважать пожелания своих пользователей.

Итак, мой вопрос, как я могу решить это?

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

Вы также можете определить, сделали ли они это, с помощью вашего AlarmManager кода, управляемого триггером, чтобы отслеживать, когда он запускается - если, в следующий раз, когда пользователь вручную запустит вашу активность, вы определите, что код тревоги не запустился слишком долго, это означает, что пользователь принудительно остановил вас. Вы можете использовать эту информацию, чтобы предложить пользователю перейти к вашему PreferenceActivity и изменить поведение ваших аварийных сигналов (например, запускать каждые 24 часа вместо каждых 10 минут), чтобы пользователь не чувствовал необходимости принудительно останавливать ваш применение.

...