4

我正在为我当地的电影院写一个粉丝应用程序,它显示了接下来几天的放映日历。每天的电影列表是使用来自该站点的参数化 HTTP 调用检索的(答案包含希伯来语,所以如果您单击链接并得到一些乱码,它可能没问题)。

该应用程序会显示接下来八天的日程安排,因此它会根据每天的日程安排请求拨打 8 个电话。

private class GetMoviesTask extends AsyncTask<Integer, Void, List<Film>>

doInBackground()每天检索电影列表,并onPostExecute()更新界面。

AsyncTask 从以下位置调用MainActivity.onCreate()

for (int i=0; i<NUMBER_OF_DAYS_TO_VIEW; i++){
    new GetMoviesTask().execute(i);
}

问题是 AsyncTask 没有同时执行。日子一天天地慢慢加载,慢得令人痛苦:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

同时启动这些 AsyncCalls 的最佳方式是什么?

4

2 回答 2

12

AsyncTask众所周知,它会在 Android 4.x 中出现回归,系统一次执行一个,而不是像自 Android 1.6 以来那样同时执行它们。这是设计使然:基本上,在较新的平台上,您可以通过调用executeOnExecutor()而不是execute(). Mark Murphy(在 StackOverflow 上称为Commonsware )在他的博客上整理了所有详细信息。

于 2012-11-11T08:51:41.917 回答
0

基本上 AsyncTask 只为您创建一个在后台运行的线程。

你可以通过两种方式实现你想要的。

  • 首先,您可以为每个操作创建单独的 AsyncTask。
  • 其次,通过在 doInBackground 方法中创建多个线程并发出并发请求和进程。之后,您可以通过将它们发布到 onProgressUpdate 或 onPostExecute 来通知您的 UI。

检查这个

带有线程的android asynctask

于 2012-11-11T08:12:37.093 回答