【问题标题】:Loading an Android UI avoiding locking加载 Android UI 避免锁定
【发布时间】:2012-01-04 15:33:00
【问题描述】:

我正在为 Android 构建一个新闻阅读器,其中第一个 Activity 将显示最新新闻列表以及缩略图预览图像。 为了获得缩略图,我必须运行一个方法,这会大大增加加载时间;所以,我想创建一个单独的线程来每次运行。 更具体地说,我想先加载新闻标题,然后一张一张加载图片;在执行所有这些操作时,我不希望 UI 被锁定(例如,如果用户触摸新闻,我希望应用程序加载它,即使还有一些缩略图仍在加载)。 我的问题是:我应该使用处理程序(每个新闻一个线程)还是 AsyncTask(每个新闻一个 asyncTask 对象)来实现这一点?
感谢您的回复。

【问题讨论】:

  • 我们在谈论多少新闻?

标签: android handler android-asynctask


【解决方案1】:

Handler Vs AsyncTask

我会使用 asynctask 下载所有“新闻链接”,然后让该 asynctask 调用 asynctask 来下载每个缩略图并在 PostExecute 上更新 UI。然后,如果用户在完成之前点击了一个链接,您可以在主 Asynctask 上调用 cancel,这将检查每个缩略图 asynctask 之间的 isCancelled() 并在它被取消时返回。

【讨论】:

    【解决方案2】:

    毫无疑问,AsyncTasks 比线程处理程序架构更加简化和模块化,但在内部它们以相同的方式执行操作。
    遇到您的问题,我建议先加载新闻。
    您的新闻 pojo/class 可以像包含两个字段,
    title 和 imageUrl。

    现在显示新闻列表并启动另一个 AsyncTask,它会一张一张地获取图像并将它们存储在 Data Str/list 中。

    每次从服务器获取图像时,您的适配器都应该是“notifyDataSetChanged()”。

    这样您就可以让用户首先看到新闻,并且加载图像而不会阻塞 UI。

    【讨论】:

      【解决方案3】:

      我会制作异步任务来加载数据,然后在异步任务运行时执行填充列表的任务

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-05
        • 1970-01-01
        • 1970-01-01
        • 2017-12-17
        相关资源
        最近更新 更多