Вопрос по android, service – Служба Android продолжает жить

6

У меня есть небольшое приложение чата. Когда он запускается, он привязывается к сервису. Эта служба имеет соединение TCP / IP с сервером.

Когда приложение не на переднем плане, моя служба создает уведомление о состоянии. Все идет нормально.

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

Googe doc: & quot; Служба будет работать до тех пор, пока соединение установлено (независимо от того, сохраняет ли клиент ссылку на IBinder службы). & Quot;

Спасибо тебе.

Ваш Ответ

3   ответа
2

чтобы ваш сервис оставался активным, даже когда ваша связующая активность разрушена, вы можете сначала запустить сервис в Activity, а затем вызвать bindService:

startService(serviceIntent);

bindService(serviceIntent, connection, Context.BIND_AUTO_CREATE);
Проверь этоlink
не работает ...
Да, это имеет смысл. Так что, если я начну с startSerive, теоретически мой сервис будет работать до тех пор, пока я не убью его или система не убьет его из-за недостатка памяти. Так что, если система убьет это, как бы вы посоветовали с этим справиться и каким-то образом перезапустить службу? Спасибо Catalin
Можете ли вы объяснить, в чем разница, и как это возможно? Спасибо Catalin
Вы можете получить лучшее объяснение здесь:link    Надеюсь, поможет.
8

Вы можете сделать свой сервис приоритетным, который будет отображать значок в панели уведомлений, чтобы пользователь мог видеть, что ваш сервис запущен. В противном случае выcannot продолжайте работу службы Кстати, вы должны знать, что вечный сервис - это антипаттерн Android, системаshould иметь возможность убить ваше приложение, когда памяти мало, и приложения давно его не использовали. Если вы делаете что-то, что на законных основаниях необходимо для того, чтобы жить "навсегда" Вы должны сделать это с услугой переднего плана.

Как лучше всего использовать диспетчер тревог? Например, я мог настроить диспетчер тревог на перезапуск службы с 5 до 5 минут. Таким образом, даже моя служба уничтожается, она немедленно возобновляется. Но я не уверен, что думает об этом Android :) Catalin
В конечном итоге они умрут, либо с помощью диспетчера тревог, чтобы перезапустить их, либо с помощью облака для мессенджера устройства, повторюсь, ваш сервис будет убит через достаточно долгое время, вы ничего не сможете сделать, никакого специального флага, ничего, это как работает андроид
Это правда, что использование службы переднего плана поможет. НО приложения, такие как Whats Up или Yahoo Messenger, не используют службу переднего плана, я никогда не видел уведомления в строке состояния. Так как же работают эти приложения? Спасибо Catalin
Обычно это считается очень плохим программированием. Вы должны позволить пользователю решить, насколько ваше приложение используется. Если пользователь взаимодействует со службой (делает что-то, что вызывает его пробуждение), тогда вы все равно попадете на вершину стека и по существу "перезапустите". Кроме того, маловероятно, что вы умрете в "от 5 до 10". минут, наверное, больше от 5 до 10hours, AlarmManager "все в порядке" для правильных целей, но убедитесь, что выlet the user decide to quit приложение. & Quot; правильно & quot; Решением для этого является обмен сообщениями между облаками и устройствами, как я уже сказал.

Похожие вопросы