gpt4 book ai didi

android - 是否仍建议使用 AsyncTask 在后台加载 listView 项目?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:00:57 27 4
gpt4 key购买 nike

背景

我听说有一些在后台加载数据的新解决方案,比 AsyncTask 更值得推荐(例如 loaders)。

问题

AsyncTasks 很棒而且易于使用。但是,它有一些限制:

  1. 类本身必须修改,因为它受到挂起任务数量的限制(大约 256 个左右)。当然,在 listView 的适配器中,我总是会取消不需要的任务(例如,当我需要更新用于不同项目的 View 时)。

  2. 我还必须在重新创建 Activity/fragment 时将它们全部取消(或以不同的方式处理)。

  3. 因为1&2,我需要管理它们,并且对它们都有引用

  4. AsyncTask 使用任务队列,有时我需要使用堆栈来代替,因此我不得不创建自己的 AsyncTask 类来代替使用堆栈。

问题

AsyncTask 有替代方案吗?

我知道之前在一些帖子中有人问过这个问题(比如 here ),但我在想是否有一种新的通用方法可以在后台加载数据来取代 asyncTask。

关于 Loader,我认为它们是用于数据库和 contentProvider,但它们是否也可以用于加载(例如)来自 Internet 的数据(如图像文件)?

Google 也制作了一个不错的示例(here,称为“bitmapFun”),根据我所见,它使用了 AsyncTask(甚至扩展它,可能是因为我提到的相同原因)。但也许我也遗漏了什么?

最佳答案

也许您应该考虑审查您的方法,您需要根据 View 执行多个更新并取消先前 View 中的所有未决任务,这给人的印象是您正在为每个需要的 View 单独执行数据加载待创建。

在带有列表适配器的 ListView 中,通常的方法是加载一部分数据(作为 ValueObject 列表或来自多个数据库行的游标)按需或在一个目标中分页,而不是逐项加载。因此,如果您希望更新下一页,基本上只需执行一个操作,即使用 AsyncTask 或 Loaders 将新项目提取到模型中,然后使其可供 UI 显示。这样,您将应用 MVC,并且您不会有多个待处理任务需要取消和控制,并且您的结构会更加稳固且更易于管理。

关于备选方案,如果您正在处理数据库,最直接的方法是使用 CursorLoader,即 loaders而不是 AsyncTask ,但是如果您要处理来自网络或文件系统的数据,您可以自由选择各种其他可用选项。 AsyncTask使用起来更简单,主要推荐用于简单的事情或一次性查询。但您也可以使用 Loader 来完成此类任务,请参阅 AsyncTaskLoader .

关于android - 是否仍建议使用 AsyncTask 在后台加载 listView 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15463146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com