繁体   English   中英

在Android上保持XMPP连接(使用asmack)

[英]Keep XMPP connection (using asmack) alive on Android

我正在开发一个通过XMPP接收推送通知的应用程序(我知道C2DM,但它有一些限制,我不能因为它而使用),问题是连接一段时间后被垃圾收集而且我不能向Android设备发送推送通知。

我想我需要实现一个Android服务,但我不知道如何实现一个能保持连接活动的服务。 有人可以帮帮我吗?

我不确定“垃圾收集”是否是正确的术语。 您的活动更有可能被Android关闭,因为您在活动中创建了连接。

但你是对的,为了保持稳定的连接,你需要将XMPP连接放入服务中 但要确保连接在一个额外的线程中,因为服务本身不是一个额外的进程或线程。 这可以通过例如Handler来完成。

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

然后,您可以通过消息/意图与服务线程进行通信。 另一种选择是Binder界面。

您还可以了解其他人如何做到这一点: BeemGTalkSMS都是实现与Android服务的XMPP连接的开源项目。 GTalkSMS使用IntentService方法 ,而Beem使用Binder与XmppConnection通信。

请注意,我们与GTalkSMS建立了非常稳定的连接,但它从未像股票GTalk服务/客户那样好。 一个原因是smacks默认保持活动检查计时器是5分钟,这是移动设备的常用方式,当您想要尽可能多地节省电池时。 所以我不得不将它设置为更高的值,这带来了一些缺点。 在这方面,您将始终在快速,响应和稳定的连接与电池寿命之间进行权衡。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM