我正在编写一个将 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/