如何在Android应用关闭时保持Web套接字连接处于活动状态

时间:2014-07-16 03:46:36

标签: android sockets websocket

我正在寻找一个向websocket发送消息的应用程序,以便在计算机内部特定参数发生变化时启用通知。参数在计算机中发生变化,通过websocket传输,然后转到我的应用程序。这部分是对的,对吗?

即使我的应用关闭,如何收到这些websocket通知?这是背景数据,对吗?这应该简单吗?我的应用程序在关闭时不需要向Web套接字发送消息。它需要做的只是在关闭时接收消息。理想情况下,它会说“告诉我何时参数更改!”在安装时,永远保持连接,并在设备上安装。

此外,Web套接字由第三方托管,因此我无权访问它可能提供的任何服务器设置。

编辑:我觉得我错过了所有这一切的重要概念。消息传递系统在关闭时如何接收推送通知?通过网络插座,对吧?因此,即使关闭了消息传递应用程序,它也会收到数据?

1 个答案:

答案 0 :(得分:4)

过去几周我一直在研究类似的问题。这就是我所做的:

  1. 我正在使用AutoBahn Android进行WebSocket实现。我怀疑在任何其他实施中,工作方式应该有些类似。
  2. 基本上有3次调用来实现websocket处理程序:
    1. 的OnOpen()
    2. onReceiveMessage()
    3. 的OnClose()
  3. 您在websocket连接中使用的3个调用:
    1. 连接()
    2. 断开()
    3. 的sendMessage()
  4. 现在这就变得棘手了!你必须保持连接活着。想到的第一个解决方案是显而易见的Service。但是Service本身并不是一个很好的方式,因为它会在你的应用程序的UI线程上工作。大部分时间它会在不打扰你或给你造成任何伤害的情况下做到这一点。但是,当你必须打开你的应用程序的用户界面时,(我有一个界面,对我来说很重要),它会让你无怨无悔!无论如何,我似乎无法以非常优雅的方式实现它(我的意思是我曾多次失去连接)。
  5. 所以我扩展了AsyncTask并在doInBackground()方法中调用了一个名为mWSConnectionStart()的函数,该函数基本上要求WebSocketConnection连接并执行其操作。同时,来自AsyncTask的postUpdate(),以防我需要构建Notification
  6. 这对我来说效果很好,我希望这种方法也适合你。

    PS:我无法解决的问题是CPU利用率高。愿你的表现更好!

    PSS:更新:我刚刚在我的设备上看到,Whatsapp(我一直在对我的应用程序性能进行基准测试)具有比我的应用程序更高的CPU利用率(电池)!也许它与WebSockets有关。

    编辑:我真的建议使用GCM而不是WebSocketConnections。我们计划自己走向GCM。原因是它不需要太多的服务器端维护,而且它可以自动完成我们的许多任务。