我有一系列必须按顺序完成的网络操作:
- 连接到特定 Wifi 设备的接入点
- 通过 TCP 向其发送一些数据
- 连接到其他接入点
- 发送 UDP 广播
我目前通过在上一个AsynchTask
onPostExecute
启动每个AsynchTask
来实现它。现在我意识到在应用程序的不同部分,我想重用代码AsynchTask 2
(发送不同的数据(,但是我不能,因为我不希望AsynchTask 3
完成后启动。我意识到我可以使用一个标志(布尔值或 int(并将其传递给AsynchTask 2
,如果标志为假,则不启动AsynchTask 3
,但这似乎令人困惑和混乱。
可以使用线程以更简洁的方式完成此操作吗?或者我最终会使用本质上相同的逻辑,即在run()
方法中使用标志?
如果您希望我发布代码,请告诉我,但是它相当长,我觉得我的问题很清楚。
如果您知道要按顺序运行所有这些任务,为什么不将它们全部放在同一个AsyncTask
中呢?您仍然可以使用不同的类或函数来使代码更加分隔。
您可以创建一个包含要执行的AsyncTask
列表的ArrayList
,然后启动第一个。
在onPostExecute
的每个AsyncTask
中,将消息发送回Handler
或BroadcastReceiver
,然后从ArrayList
开始下一个AsyncTask
,这可能是Singleton
,也可能是静态的。我会为它提供代码,但我现在没有时间。
此外,使用 Thread
可能会使其更干净,但它也可能使它更加混乱,这一切都取决于您如何实现它。我个人从不使用AsyncTask
.我总是使用Thread
和Handler
,但这只是偏好。