Android Asynctask 与实例变量交互
Posted
技术标签:
【中文标题】Android Asynctask 与实例变量交互【英文标题】:Android Asynctask and instance variable interaction 【发布时间】:2020-06-22 22:44:52 【问题描述】:假设我有一个像下面这样的课程;
class X
private List<String> listing;
class XAsync extends AsyncTask...
<normal async task class>
doInBackground
listing = <populating from a web service>
public redirectList()
while(listing.size == 0)
continue;
redirect(listing);
如何确保通过异步任务成功填充重定向方法中发送的列表参数?确保列表中填充了 while 子句是否是最佳实践?
谢谢
【问题讨论】:
你为什么认为你可能需要while
循环?也就是说,你为什么不能在doInBackground()
的末尾或onPostExecute()
中调用redirect(listing);
?
@MikeM.you 是对的,我只是问在 cpu ram 等方面哪个是一个好习惯。
嗯,一般来说,像这样的循环通常是不必要的,尤其是在事件驱动的编程中,在我们所处的级别。在这种特殊情况下,如果您可以在完成后执行“重定向”,则无需在下载期间让该循环不断旋转。这基本上只是在浪费资源。
@MikeM。如果我必须在那里使用线程而不是异步任务怎么办。这仍然不是一个好习惯吗?
同样的事情,差不多。 AsyncTask
基本上只是 Thread
的“包装”。如果您想直接自己处理单独的Thread
,同样的想法也适用;在Thread
的工作完成后执行下一步。无需另一个Thread
持续监控它。
【参考方案1】:
您应该从doInBackground
返回要放入listing
的值,然后在onPostExecute
中使用它。也就是说,你的redirect(listing);
调用应该在onPostExecute
中,这样你就不需要那个while 循环了。
【讨论】:
以上是关于Android Asynctask 与实例变量交互的主要内容,如果未能解决你的问题,请参考以下文章
Android中使用AsyncTask实现文件下载以及进度更新提示