【发布时间】:2015-05-19 00:04:17
【问题描述】:
我在 Android 中使用 AsyncTask 已有一段时间了。我喜欢它,因为您可以在后台线程上异步运行您想要的任何任务(任务是指代码块)。
一开始,每次任务应该异步运行和/或在后台线程上运行时,我都会将其代码捆绑到 AsyncTask 的扩展中。我有时需要链接多个这些任务(一个取决于另一个的结果)并在AsyncTask.onPostExecute(T data) 中调用下一个(一旦执行完成),但现在我觉得我的代码被太多样板代码(AsyncTask骨架)和连续任务的耦合。
最重要的是,我的 AsyncTask 有时是从另一个 AsyncTask 启动的,Android 可能会抱怨。例如,如果我想在前/后执行中显示一些元素,那么在嵌套调用时这将是一个问题。
特别是,我正在寻找一种方法来模块化地选择一个任务应该同步/异步、顺序/并行还是与另一个一起运行。到目前为止,我的选择是有一个简单的接口Task 期望实现execute(T data) 方法。然后我可以捆绑其中的一个或多个,按顺序或并行运行,如以下块中所定义:
public doMultipleActions() {
runTask(new MyFirstParallelTask(myFirstData)); // running asynchronously in parallel the first task
runTask(new MySecondParallelTask(mySecondData)); // running asynchronously in parallel the second task
runTask(new MyFirstSequentialTask(myThirdData, new MySecondSequentialTask(myFourthData, new DummyCallback()))); // running asynchronously sequentially the third and fourth tasks
}
即runTask(Task t) 会将Task.execute(T data) 的代码运行到AsyncTask.doInBackground(T... data) 代码块中。顺序任务还期望在 AsyncTask.onPostExecute(T data) 代码块中执行另一个任务。
我查看了多个类似的问题:Can I chain async task sequentially (starting one after the previous asynctask completes)、AsyncTask chaining in Activity (callback?)、How to avoid chaining several AsyncTask calls?,最接近我的问题但我找不到任何有用的东西,即使我不认为我是唯一一个处理这个问题的人.
在Android中AsyncTask的模块化使用是否有更好的方法、预期的方法,甚至是设计模式?
【问题讨论】:
标签: java android design-patterns android-asynctask