【问题标题】:Keep XMPP connection (using asmack) alive on Android在 Android 上保持 XMPP 连接(使用 asmack)处于活动状态
【发布时间】:2011-12-01 11:49:04
【问题描述】:

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

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

【问题讨论】:

    标签: android xmpp push smack keep-alive


    【解决方案1】:

    我不确定“收集垃圾”是否是正确的术语。您的 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 接口。

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

    请注意,我们与 GTalkSMS 建立了相当稳定的连接,但它从来没有像普通的 GTalk 服务/客户端那样好。一个原因是,默认的保持活动检查计时器是 5 分钟,当您想要尽可能多地节省电池电量时,这对于移动设备来说是一种常见的方式。所以我不得不将它设置为更高的值,这会带来一些缺点。在这方面,您总是需要在快速、响应迅速且稳定的连接与电池寿命之间进行权衡。

    【讨论】:

    • 我在 onCreate() 方法中创建了一个服务,我用 ServiceHandler、Looper 和 Handler Thread 编写了您的建议,现在我的连接仍然存在并且我的服务仍在运行。再次感谢。
    • 你能分享你的代码吗@danilodeveloper 我正面临这样的问题。我没有在后台收到消息。(就像我在另一个活动中而不是在聊天活动中。)请分享你的 xmpp 连接类。
    • 嗨@DevendraSingh,不幸的是我5年前问过这个问题,我没有代码了。对此感到抱歉:(
    猜你喜欢
    • 2013-01-26
    • 2017-06-08
    • 2011-09-07
    • 2012-01-03
    • 2021-09-13
    • 2013-08-27
    • 2019-09-01
    • 2012-07-05
    相关资源
    最近更新 更多