android - 如何在 ListView 中使用延迟加载或异步任务

标签 android listview load android-asynctask lazy-evaluation

我正在我的应用程序中创建一个 View 列表,显示用户设备中所有已安装的应用程序。它显示名称和图标。 ListView 的加载时间很长,并且 UI 在加载时没有响应。我看过具有延迟加载和异步任务教程的资源,但它们似乎都是从互联网获取图像。我需要延迟加载系统中的图像(即应用程序图标)。我也不知道如何使用异步任务来做到这一点。有人可以帮我延迟加载或异步任务应用程序图标吗?这是我的申请中非常重要的一部分,我将非常感激。谢谢。

最佳答案

因此,如果没有任何明确的尝试/代码可供展示,我通常不会提供建议,但我记得当我第一次遇到 AsyncTasks 和一般线程时,一开始有点令人困惑,所以我会让你走上正确的道路。

因此,AsyncTask 基本上运行一个可能需要一段时间的过程(例如从服务器加载信息,或者在您的情况下,获取文件)。它有几个详细的方法 here ,但我相信,对于您的场景,您只需要使用 doInBackgroundonPostExecute 方法。在每个过程中,您可能要做的就是在 doInBackground 中获取 ListView 的实际图像和数据,然后更新 ListView 以在 onPostExecute 中显示该数据。考虑概述的示例 here 。本质上,doInBackground 方法会将一些数据(在本例中是您的文件和其他内容 - 通常采用数组或列表或其他形式(如果发送大量数据))发送到 onPostExecute 方法将处理那里的数据。

发生的情况是,您的主 UI 线程负担过重,并且程序将间歇性地等待 UI 中图像的获取和加载。 AsyncTask 通过将所有工作交给单独的工作线程来为您处理此问题。当 UI 线程负担过重时,通常会出现问题,例如您的程序意外关闭,因为 Android 注意到主应用程序线程使用了太多资源(代码中没有实际错误)。

至于图像数据的延迟加载,我不完全确定它是如何工作的(从来没有使用过它),但是 this看起来真的很有帮助。

希望这能给您一些指导。

关于android - 如何在 ListView 中使用延迟加载或异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6989656/

相关文章:

android - Android 中的全局搜索

java - 解析 JSONObject 和 JSONArray 并在 ListView 中修复它们

listview - ExtJS:如何用列将文本包装在ListView中?

asp.net - ASP.NET 页面中的各种 asp 控件

javascript - 使用 AJAX 调用从页面加载特定元素并将它们附加到列表中?

c# - 为什么 EF 在 FirstOrDefault 调用 (EF6) 后没有从数据库返回包含新数据的实体?

android - 测试 apk multidexed 不会在 api-19 上运行

android - 如何在 Android 设备中模拟计步器传感器?

Android ListView setSelectionFromTop 不工作

listview - Flutter:编辑我的文本字段时键盘立即消失