Поддерживать подключение XMPP (используя asmack) на Android - PullRequest
12 голосов
/ 05 октября 2011

Я разрабатываю приложение, которое получает push-уведомления через XMPP (я знаю C2DM, но у него есть некоторые ограничения, и я не могу его использовать из-за этого), проблема в том, что через некоторое время происходит сборка мусора, и я невозможно отправить push-уведомление на устройство Android.

Я думаю, что мне нужно реализовать сервис Android, но я не знаю, как реализовать сервис, который бы поддерживал соединение. Кто-нибудь может мне помочь?

1 Ответ

20 голосов
/ 05 октября 2011

Я не уверен, является ли термин "сбор мусора" правильным термином здесь. Скорее всего, ваша деятельность просто закрывается Android, потому что вы создаете соединение в Activity.

Но вы правы, чтобы поддерживать стабильное соединение, вам нужно поместить XMPP-соединение в Сервис . Но убедитесь, что соединение находится в дополнительном потоке, потому что служба сама по себе не является дополнительным процессом или потоком. Это можно сделать, например, с помощью обработчика .

HandlerThread thread = new HandlerThread(SERVICE_THREAD_NAME);
thread.start();
handlerThreadId = thread.getId();
serviceLooper = thread.getLooper();
serviceHandler = new ServiceHandler(serviceLooper);

Затем вы можете общаться с Сервисной веткой через сообщения / намерения. Другой альтернативой может быть интерфейс Binder .

Вы также можете посмотреть, как это делают другие: Beem и GTalkSMS - оба проекта с открытым исходным кодом, которые реализуют соединение XMPP со службой Android. GTalkSMS использует подход IntentService , тогда как Beem использует Binder для связи с XmppConnection.

Обратите внимание, что мы получаем довольно стабильное соединение с GTalkSMS, но оно никогда не было таким хорошим, как стандартная служба / клиент GTalk. Одна из причин этого заключается в том, что по умолчанию таймер проверки активности остается равным 5 минутам, что очень часто для мобильных устройств, когда вы хотите сэкономить как можно больше батареи. Поэтому мне пришлось установить более высокое значение, что имеет некоторые недостатки. Когда дело доходит до этого, у вас всегда будет компромисс между быстрым, быстрым и стабильным соединением и временем автономной работы.

...