Подтвердить что ты не робот

Храните XMPP-соединение (используя asmack) в режиме реального времени на Android

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

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

4b9b3361

Ответ 1

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

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

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 Service/Client. Одна из причин заключается в том, что таймер проверки по умолчанию по умолчанию остается 5 минут, что часто бывает для мобильного устройства, когда вы хотите сохранить как можно больше батареи. Поэтому мне пришлось установить его на более высокую ценность, что связано с некоторыми недостатками. У вас всегда будет компромисс между быстрым, отзывчивым и стабильным соединением и временем автономной работы, когда дело доходит до этого.