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

android asynctask 多个实例是一个线程池吗

android源码解析之-->异步任务AsyncTask

Android中使用AsyncTask实现文件下载以及进度更新提示

Android - 传递按钮实例时避免 AsyncTask 中的内存泄漏

安卓Android开发:使用Executor线程池代替AsyncTask进行异步操作