【发布时间】:2011-12-01 11:49:04
【问题描述】:
我正在开发一个通过 XMPP 接收推送通知的应用程序(我知道 C2DM,但它有一些限制,因此我不能使用),问题是一段时间后垃圾收集的连接,我无法向 Android 设备发送推送通知。
我想我需要实现一个 Android 服务,但我不知道如何实现一个能够保持连接活动的服务。 有人可以帮助我吗?
【问题讨论】:
标签: android xmpp push smack keep-alive
我正在开发一个通过 XMPP 接收推送通知的应用程序(我知道 C2DM,但它有一些限制,因此我不能使用),问题是一段时间后垃圾收集的连接,我无法向 Android 设备发送推送通知。
我想我需要实现一个 Android 服务,但我不知道如何实现一个能够保持连接活动的服务。 有人可以帮助我吗?
【问题讨论】:
标签: android xmpp push smack keep-alive
我不确定“收集垃圾”是否是正确的术语。您的 Activity 更有可能被 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 都是实现与 Android 服务的 XMPP 连接的开源项目。 GTalkSMS 使用IntentService approach,而Beem 使用Binder 与XmppConnection 进行通信。
请注意,我们与 GTalkSMS 建立了相当稳定的连接,但它从来没有像普通的 GTalk 服务/客户端那样好。一个原因是,默认的保持活动检查计时器是 5 分钟,当您想要尽可能多地节省电池电量时,这对于移动设备来说是一种常见的方式。所以我不得不将它设置为更高的值,这会带来一些缺点。在这方面,您总是需要在快速、响应迅速且稳定的连接与电池寿命之间进行权衡。
【讨论】: