在具有许多活动的Android设备上处理一个tcp连接的最佳实践

时间:2013-06-26 08:08:55

标签: android service tcp android-asynctask singleton

请先让我解释一下我的问题。 我有一个服务器使用tcp-ip套接字连接和基于字节流的自定义协议。当然,客户端是一个Android应用程序,也实现了协议。但是,两者都需要以两种方式进行通信,从另一方读取并写出来。在服务器上它没有问题,但Android客户端粉碎了我的脑袋。 我想要的基本上是android客户端在启动应用程序时如何与服务器建立tcp连接以及(重新)在每个活动中使用它来发送和接收数据的方式。

我读到了这个:Android TCP connection best practice 当然还有讨论何时使用服务和单身人士。 我仍然不确定像Android上的Facebook应用程序这样的应用程序是如何做的。好吧,他们可能会使用REST而不是简单的字节流tcp连接,但是当打开应用程序时,它会开始接收数据,并在完成数据(可能是新闻流)时呈现并显示。看起来像AsyncTasks,不是吗?

所以我的问题是......:

  1. 这样的应用程序怎么样? - 如何实现这种通信方式(使用AsyncTasks或仅作为单独的线程?)?那么我需要在每个活动中实现一个或多个AsyncTasks吗? - 在这种情况下,我希望每个AsyncTask都使用Socket及其来自单例的流。这可能吗?

  2. 您对此主题有什么好的示例项目吗?

  3. 提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我最近正在研究这个主题,与你有几乎相同的用例,但有一点不同:我实现了多个并发TCP套接字连接,这是很多工作,但最终它的工作就像一个魅力。

在我看来,AsyncTask无效。如果您想要传输大小合适的数据集(如图像文件夹或大文件),同时保持用户与当前进度保持同步,它们可以具有优势。对于灵活的通信,使用Threads更容易。

使“ConnectionThreads”可以重复用于多个活动的正确方法是“ConnectionService”。您的活动可以订阅此service并要求它打开与服务器的连接。连接后,即使活动暂停/销毁,服务也会保持连接。

答案 1 :(得分:0)

我通常做的是使用服务来执行实际请求,然后将信息放在数据库中。 在活动中,我使用游标显示我想要的数据,因此当数据库更新时,活动会自动更新。

这是关于第一个推特应用程序如何完成的io 2010 presentation

我不知道Volley是否适用于您的情况,但您应该看看。关于Volley有一个io 2013 presentation