【问题标题】:How to handle TCP data?如何处理 TCP 数据?
【发布时间】:2013-07-27 11:59:55
【问题描述】:

我正在做一个不断从 TCP 套接字接收数据的项目。 我需要将该数据传递给另一个活动,以便我可以执行我的操作。 对于每次传递数据的意图传递都是无用的。 我们可以使用计时器,但它们可能会丢失一些数据。 我需要一些过程,比如它应该在接收到的那一刻连续通过数据。 请建议我在这种情况下处理 TCP 数据的最佳过程。 如果你能给我一个例子,我会更加感激。

这是我的 TCP 连接和接收代码

Sockets = new Socket("My IP",Port);
while (s.isConnected()) {
in = new BufferedReader(
new InputStreamReader(s.getInputStream()));
int nRead;
char[] data = new char[1024 + 1024];        
String decoded = "";                    
while ((nRead = in.read(data, 0, data.length)) != -1) {
decoded = new String(data, 0, nRead); **// This decoded data need to pass to another activity.**
}

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以使用以Looper.getMainLooper() 为目标的Handler 从后台线程高效、重复地将数据发布到 UI 线程。

    Android 培训页面的Communicating with the UI Thread 部分介绍了如何使用Handler。不久前,我还写了 a blog post 关于 Loopers 的文章,其中揭示了它们的工作原理。

    【讨论】:

    • 请注意,Handlers 的 Message 对象池有限 - 只有 50 个 IIRC。如果您只使用处理程序进行跨线程繁重的通信,那么池真的很容易耗尽。我会从 java.concurrent 中查看 BlockingQueueBlockingDeque
    • @Delyan 有趣。我的直觉是,如果您的设置要么如此快速地推送消息,要么如此缓慢地处理它们以至于这个限制成为一个问题,那么计划中有问题,而不是消息队列的选择。当然,没有什么是那么容易的,我相信也有例外。假设池大小不是问题,您会使用哪种方法?
    • Handlers 和 HandlerThreads 如果您需要 casual 线程通信,则可以选择。但是,我刚刚编写了一个解析传入数据流的应用程序,将每一行作为消息传递,我可以向您保证,在我的 Nexus 4 上,消息池是瓶颈(这就是我发现它的方式)。因此,如果您不是太垃圾,请使用处理程序(尽管如果您正在执行任何处理,则不在 UI 线程上,请改用HandlerThread!)。如果您正在做严肃的工作,但需要大量消息,请使用适当的队列,无论如何它们更接近消费者-生产者模型。
    • 感谢您的洞察力。
    【解决方案2】:

    您是否尝试过查看 AIDL?下面是一些链接

    Need AIDL tutorials http://developer.android.com/guide/components/aidl.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-19
      • 2014-04-09
      • 2010-11-29
      • 1970-01-01
      • 2015-07-27
      • 2015-02-26
      • 2021-06-25
      • 2020-06-01
      相关资源
      最近更新 更多