java - Android网络客户端实现

标签 java android android-asynctask client runnable

我正在编写一个将 RTSP 流式传输到服务器的应用程序。对于“NetworkOnMainThreadException”,我需要在单独的线程上执行所有网络通信。我知道 AsyncTask 是在单独线程上执行网络操作的一种稍微简化的方法。然而,它的接口(interface)也受到限制(main和asynctask之间的通信)。另外,从逻辑上讲,它似乎不应该用于长时间运行的任务。

有 Thread Runnable 支持选项。它更加灵活和复杂。

使用 AsyncTask 实现客户端有意义还是应该坚持使用 Thread Runnable?

最佳答案

对于长时间运行的操作,您应该使用线程AsyncTask 是短任务的最佳选择,这些任务只需几秒钟并由用户直接启动。 AsyncTask 的一个用例是按需从 Web 服务加载数据。线程的一个用例是某个服务器和客户端之间的长时间运行的连接,通过该连接不断交换数据。总结一下,使用 AsyncTask 的原因:

  • 任务只需几秒钟
  • 任务由用户直接启动,例如通过按钮
  • 用户通过 ProgressBar 或其他指示器接收有关进度的反馈

以及使用线程的原因:

  • 任务需要很长时间才能执行或没有预定义的结束,例如服务器监听连接
  • 任务在后台运行,用户不知情
  • 该任务独立于UI运行,只有很少的反馈。

您必须决定使用哪个选项,两者都有优点和缺点。但你的问题听起来像 Thread 可能对你更有用。如果您还有任何其他问题,请随时提问。

关于java - Android网络客户端实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23254633/

相关文章:

java - 使用 XStream 反序列化通用类型

java - 如何在java中将元素推送到空的固定大小数组

java - Android 服务线程

java - Android Sqlite - 无法在 onCreate 之外调用数据库处理程序

java - 这是我在 Google MySQL 中的 "instance name"

java - 如何在 Java 的 Rally Rest 工具包中获取整个 TestFolders 树?

android - 使用 Mockito.verify() 时,不只是检查是否在模拟对象上调用了该函数,而是调用来自真实对象的方法

android - 如何将进度条添加到独立的 Asynctask?

android - React Native Firebase : no custom sound, 无振动

Android 检查 NoClassDefFoundError : javax/xml/bind/JAXBException