Во-первых, если вы используете передний план Service
, маловероятно, что он будет внезапно уничтожен. Было сказано, что:
Если мой сервис работает в том же процессе, что и приложение, сервис тоже будет жить?
Ну нет. Ваш Service
является одним из компонентов вашего приложения. Если оно живо, то и приложение живо (см. также третий вопрос). Но если вы вернете START_STICKY
или START_REDELIVER_INTENT
из onStartCommand()
, то он будет воссоздан при прекращении системой (не при принудительной остановке) как можно скорее.
Я использую BroadcastReceiver для обнаружения изменений в подключении устройства, поэтому, если приложение будет убито, а служба нет, буду ли я по-прежнему получать эти изменения подключения?
Для статического BroadcastReceiver
(зарегистрированного в Manifest
): это зависит от того, как было завершено ваше приложение. Если пользователь принудительно остановил его, то приемник снова начнет работать только после того, как пользователь снова запустит ваше приложение. Во всех остальных случаях: статический приемник будет цел, а если приемник создавался и регистрировался динамически, то при выключении Activity
/Service
нужно вовремя отменять регистрацию, чтобы избежать утечек памяти, поэтому такие ресиверы не предназначены для все равно работают 24/7.
Если я хочу получить текущий статус подключения от службы, могу ли я сделать это с помощью getApplicationContext() или он может вернуть значение null?
Это проще: Service
, как и Activity
, расширяет ContextWrapper
. Так что, если он запущен и работает, вы можете позвонить getApplicationContext()
.
Я отправляю событие через шину Отто каждый раз, когда приложение меняет свой статус с переднего плана на фон (при приостановлении/возобновлении приложения)... Если мое приложение убито, могу ли я доверять этим событиям? Или их нельзя было отправить?
Я думаю, что здесь вы можете перепутать Application
и Activity
. Потому что, если нужно уведомить Service
, то вы, скорее всего, думаете о видимой части вашего приложения и о чем-то вроде знаменитого входящего телефонного звонка.
В этом случае ваша активность может уведомить Service
либо в onPause()
, либо в onStop()
. Оба гарантированно вызываются с Version HONEYCOMB
.
Теперь я должен признаться, что не уверен в EventBus Отто, но один из вариантов, который, безусловно, сработает, - это иметь Service
с START_REDELIVER_INTENT
и уведомить Службу, вызвав startService(myNotifyingIntent)
.
Обычно процесс вашего приложения не будет мгновенно уничтожен только потому, что текущий Activity
больше не находится на переднем плане. Так что вполне вероятно, что Service
получит любое уведомление, которое вы отправляете от onPause()
.
person
Bö macht Blau
schedule
26.02.2016