0

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

我读了这篇文章:Android TCP connection best practice ,当然还有讨论何时使用服务和单例。我仍然不确定android上的facebook应用程序是如何做这些事情的。好吧,他们可能会使用 REST 而不是普通的 bytestream tcp 连接,但是当打开应用程序时,它会开始接收数据,并且当完成的数据(可能是新闻流)被渲染和显示时。看起来像 AsyncTasks,不是吗?

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

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

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

提前感谢您的帮助!

4

2 回答 2

0

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

在我看来, AsyncTask 不是有效的选择。如果您想传输固定大小的数据集合(如图像文件夹或大文件),同时让用户了解当前进度,它们可能具有优势。对于灵活的通信,使用线程更容易。

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

于 2013-06-26T15:14:37.827 回答
0

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

这是io 2010 演示文稿,介绍了第一个 twitter 应用程序是如何完成的

我不知道Volley是否适用于你的情况,但你应该看看。有一个关于 Volley的io 2013 演示文稿

于 2013-06-26T15:50:45.143 回答