【问题标题】:Android Asynctask and instance variable interactionAndroid Asynctask 与实例变量交互
【发布时间】: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 持续监控它。

标签: android multithreading asynchronous android-asynctask thread-safety


【解决方案1】:

您应该从doInBackground 返回要放入listing 的值,然后在onPostExecute 中使用它。也就是说,你的redirect(listing); 调用应该在onPostExecute 中,这样你就不需要那个while 循环了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 2014-10-18
    • 1970-01-01
    • 2013-03-22
    • 2011-08-26
    相关资源
    最近更新 更多