android - 如何为 Listviews 安排繁重的工作以便稍后显示?

标签 android multithreading listview android-cursor

我有一个包含 200 个项目的 ListView 。我为每一行使用自定义 View 。有一个代码需要一些时间来计算,因此列表在滚动时挂起并且加载缓慢(2-3 秒)。

我已将 SimpleCursorAdapter 子类化,并使用 Filterable 和 SectionIndexer。

我打算首先显示记录的名称,然后将计算放入一个线程中,然后在完成后显示。

我如何推迟一些工作,然后更新 ListView 以包含计算数据?这应该在没有用户交互的情况下即时显示。

最佳答案

由于 android 的 Android UI 是单线程的,因此每当您执行长时间操作时它都会被阻塞。

您可以执行常规的 Java 线程处理,并在主 UI 类中有一个 Handler(),您可以将信息反馈到其中。但是..

最简单的方法是创建一个 AsyncTask()。它们是略有变化的 java 线程。他们可以在主计算之前/之后执行 UI 操作。例如:

 private class AndroidThread extends AsyncTask {
      protected Object doInBackground(Object... params) {
           return result;
      }

      protected void onPostExecute(Object result) {
           // do things here with the result of the doInBackground function
           // Like: "UiElement"."performTask(result)"
      }
 }

有关 AsyncTask 的更多信息 see this

关于android - 如何为 Listviews 安排繁重的工作以便稍后显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2527311/

相关文章:

java - 我想要一个包含多个内容的数组列表的自定义 listView

android - 如何使用 NanoHTTPD(Android 内部)在 sdcard 上提供文件

android - Android蓝牙低功耗回调(LeScanCallBack)在单独的线程上?

java - 释放锁后强制下一个线程的最短等待时间?

java - 在 TextView 中添加 http ://前面的所有可链接项目

android - 来自 MediaDocumentsProvider 的权限拒绝

java - 重写后线程未按预期运行

android - ListView 子项的 onclicklistener

java - Android - 列出Activity到Activity

java - ListView 中的图像混合在一起