Android Volley 以及响应中 Tasks 或 Threads 的使用

Android Volley and the usage of Tasks or Threads in the response

在我的应用程序中,我执行不同的请求来获取网站的 HTML 代码。之后,App 解析 HTML,可能会执行另一个请求并解析。最后一个 ListView 填充了解析后的数据。

现在我读到 Volley 在 UI 线程上运行 onResponse 方法中的所有代码。所以也许最好在新线程中进行解析。我是这样实现的。

new Thread(new HTMLSiteParsingTask(response)).start();

class HTMLSiteParsingTask implements Runnable {
  String mResponse;
  HTMLSiteParsingTask(String response) {
    mResponse = response;
  }
  public void run() {
  //do something...
  callerActivity.addData(dataHashMap);
  }
}

在处理结束时,我调用 MainActivity 的方法将数据添加到 Listview "callerActivity.addData(dataHashMap);"。此方法执行以下操作:

runOnUiThread(new AddItemsTask(ItemList));

AsyncTask 和 Thread 之间有区别吗?我应该使用其中之一吗?还是无所谓?有没有更好的方法来做这些事情?

感谢您的回答

A​​syncTaks 最适合 ui 根据 google 他们自己的建议进行短时间的工作。通过这种方式,您可以轻松地直接访问 ui 线程。缺点是它非常而且我对 activity 或调用它的片段非常厌倦。此外,如果您需要直接通知 activity,则必须传递 activity 的引用(这可能导致内存泄漏)或使用事件总线或广播接收器等方法。

如果您决定通过 activity 作为简单方法,请确保将其放在 WeakReference 中,并在使用它之前检查其是否为 null、isFinishing 和 isDestroyed。这将避免潜在的崩溃和周参考让我们 activity 在需要时收集垃圾。

线程在 AsyncTasks 内部使用,并通过 AsyncTask 以智能方式处理。如果您确实自己使用它,您将负责清理和汇集以及所有效率。此外,这种方式无法像 AsyncTasks

中的 inbuilt 方法那样轻松访问 UI 线程

后台任务有很多可用选项,例如服务、意图服务、加载器、作业调度程序等。这实际上取决于您对这些任务的理解和使用程度,以及它们如何符合您的逻辑。没有一个正确的方法。

有很多库也可以帮助解决所有这些问题,例如 volley、rx-java 等等。

我个人几乎会在需要和适合时使用所有可用的工具。编码愉快:)

实施 custom request。将您的解析逻辑放在 parseNetworkResponse 方法中——它会被 Volley 从工作线程中调用。