Я не уверен, является ли термин "сбор мусора" правильным термином здесь. Скорее всего, ваша деятельность просто закрывается 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 минутам, что очень часто для мобильных устройств, когда вы хотите сэкономить как можно больше батареи. Поэтому мне пришлось установить более высокое значение, что имеет некоторые недостатки. Когда дело доходит до этого, у вас всегда будет компромисс между быстрым, быстрым и стабильным соединением и временем автономной работы.