2012-10-10 67 views
1

虽然我还没有尝试过,但从理论的角度来看,我只是为了澄清我的疑问而提出这个问题。从AsyncTask调用AsyncTask

我有这样一个场景: 1.向服务器发送请求并收到JSON响应。为此,我使用AsyncTask,因为可能会延迟接收响应。 2.从此响应获取图像URL。 3.再使用一个AsyncTask,调用图像URL并获取图像。 (再次可能需要时间来获取图像)

那么你认为使用2个AyncTask只是为了获得该图像效率低下。 或者,在步骤1中,不是使用AsyncTask,而是依次运行代码并设置Timeout。

请建议。

+3

我可能会丢失一些东西,但是有什么理由不能在Asynctask的线程(doInBackground)中同步获取图像吗? – dennisdrew

+3

是啊,这一切都在1 asnyctask – binnyb

+1

如果图像数量很大,你可以使用[LazyLoading](http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-在列表视图中加载图像) –

回答

1

我要继续前进,并建议将此作为一个答案,这原本是我的评论:

只是同步获取的图像中,你从提取的JSON相同的AsyncTask。例如:

doInBackground(Void...params){ 
    //fetch JSON 
    // once JSON is fetched, fetch image 
} 
0

不知道你怎么想正是这种结构,但文件说:

execute(Params...) must be invoked on the UI thread. 

http://developer.android.com/reference/android/os/AsyncTask.html

,所以你不能从其他异步任务后台方法执行新的异步任务。

即使您尝试使用进度方法执行此操作,然后由于HONEYCOMB asynctasks已序列化,所以您的第二个异步任务无论如何都会排队 - 您必须使用THREAD_POOL_EXECUTOR才能使其并行运行。

+0

难道他不能在第一个任务的onPostExecute(如果他选择继续使用2 Asynctask方法)技术上进行调用吗? – dennisdrew

+0

当然,但在我看来,一项任务应该更有效率,并且会降低复杂性。 – marcinj

+1

问题措辞的方式,这听起来像他问他是否可以在AsyncTask的doInBackground()中启动它。他*可以*在onPostExecute中调用新的AsyncTask,如果他由于某种原因想要保持两个对象的实现是分开的。如果有多种方式在应用中获取图片网址,这可能是可取的。然后他可以在任何情况下重用第二个AsyncTask。 – DeeV