3

我正在开发一个看起来类似于 Google Play 应用程序的应用程序(在片段内使用 gridviews 滑动视图,此外 gridview [图像 + 文本] 中的数据是从远程服务器检索的)。

我的问题是后台任务。我无法决定使用什么来从互联网上检索数据。主要是我试图决定是使用 AsyncTask 还是手动线程。当然,实现 AsyncTask 会更容易,但经过一些研究,我注意到很多人发现它有限制。

在我的特殊情况下,我想从 Internet 下载数据作为 Json 对象,解析它们并在 gridview 中显示数据。网格视图最多有 30 个项目,每个项目包含一个缩略图和 3 个文本视图。在 Android 文档中,他们说 AsyncTask 适合短操作(最多几秒钟)。填写多达 30 个项目是否会被视为一项短期操作?我希望同时获取数据。我还想支持 API 8 及更高版本的 Android 手机。我读到对于不同的 API,AsyncTask 的行为不同(串行或同时)

我的问题是:为我的应用程序使用 AsyncTask 是否合适?还是我必须手动完成所有操作?ThreadPoolExecutor 是第三种方法吗?比手动穿线容易吗?

任何建议都将不胜感激,如果不对这个问题做出决定,我就无法继续实施。

提前致谢!

4

3 回答 3

0

去年在伦敦参加DroidCon时,一个演讲让我注意到为什么使用 AsyncTasks 从网络加载数据是不可靠的。

此演示文稿是关于RoboSpice 库的。

该站点还有一个非常好的信息图,解释了为什么 AsyncTasks 不可靠以及 RoboSpice 为修正这些问题所做的工作。

免责声明:我绝不隶属于 RoboSpice,也从未尝试过。他们的演示给我留下了深刻的印象并确信这是一个值得尝试的工具。

于 2013-01-06T16:08:55.070 回答
0

我的理解是,关于仅将 AsyncTasks 用于短操作的评论更多地旨在不期望在长操作完成时可以使用相同的视图。例如,如果用户离开应用程序并返回或当前活动因某种原因消失。解决这个问题的典型方法是使用服务并在那里启动一个普通的旧线程,然后发送一些消息告诉当前活动在操作完成时刷新。

下载和处理您的数据可能是最长的操作。所以我会以此为基础来判断它是短的还是长的。如果您根本不关心持久化数据并且不介意在用户离开和返回时重新开始下载,您可以使用 AsyncTask 而不用考虑。

如果您使用的是 GridView,则您应该只填充足够的视图,以便一次仅超过屏幕上显示的数量。

我会说 AsyncTask 在您的情况下很好,假设它是几千字节的数据而不是兆字节或数百千字节。Megs 的数据,我会说移动到带有线程的服务。几百k,是折腾起来的。

另外,请查看 Loaders ...如果您想查看更适合这种加载的替代方案。

于 2013-01-02T15:33:15.280 回答
-1

朋友,我正在按照您的需要在一个项目中工作,并且要支持 API 8 及更高版本,您应该使用 Asynctask 下载任何内容,否则您将遇到 API 15 及更高版本的崩溃,因为它甚至不会让您运行您的应用程序即使是短期操作也没有 AsyncTask。

因此,由于我几乎完成了您需要的所有工作,并且它在上面的 API 9 中运行良好,您应该使用 Asynctask,我已经使用 AsyncTask 实现了 SherlockActionbar、EndlessAdapter 和 ViewPager,所以继续,如果您需要更多帮助,请再次询问之后。

于 2013-01-02T15:31:28.230 回答