Android中的AsyncTask嵌套AsyncTask

6
所以,我正在开发一个条形码解码器,一旦我们获得了条形码,就会通过互联网连接多个API来解码扫描到的内容。问题在于,我必须将一些XML解析链接在一起,而且我不知道我是否做得对。
因此,一旦扫描到条形码,我的程序调用一个ASyncTask,该任务通过API检索产品名称。一旦它有了名称,我希望它调用另一个ASyncTask。我知道通过在另一个ASyncTask的onPostExecute()中实例化它是可能的,但我认为这是错误的,因为这就像盒子里面还有盒子。
那么,难道不可能/更好地在我的主Activity中实例化我的第二个ASyncTask,并让它等待直到我的第一个ASyncTask完成吗?
(英语不是我主要的语言,希望我表述清楚了。)

3
为什么要使用两个任务?为什么不能在第一个任务的doInBackground中直接完成想要做的事情? - Renard
3
不应嘲笑他人的语言(英语),因为它可能不是他/她的母语。 - waqaslam
@Renard,让所有内容都放在doInBackground中似乎太混乱了。我的第一个ASyncTask可以返回不同的结果,需要先处理,然后根据结果进行更多的解析。因此,启动其他ASyncTask可以将代码分成多个部分,并使其更加清晰。 - MagicMicky
1
@MagicMicky:是的,但你不一定需要一个异步任务来完成。你可能只需要一个不同的方法。 - njzk2
3个回答

17

我认为在第一个 AsyncTaskonPostExecute 中启动第二个 AsyncTask 是绝对合法的。混合这两个操作是一个不好的逻辑思路,就像"The Offspring"乐队所说的:“你必须保持它们分开”。

如果你不想直接在 onPostExecute 中执行它,可以设置一个处理程序在活动中执行它,并从 onPostExecute 调用此处理程序。

最后一件事 - 如果你有很多逻辑 - 将它们移动到一个单独的文件中,不要将它们全部保存在同一个文件中。


好的,我要尝试在我的活动中设置一个处理程序,并从onPostExecute()中调用它。 是的,我有多个文件,甚至多个包。这是我的第一个真正的Android项目,我希望它尽可能地清晰! - MagicMicky

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接