Android 在不阻塞UI线程的情况下显示大型表

Android 在不阻塞UI线程的情况下显示大型表,android,android-asynctask,tablelayout,Android,Android Asynctask,Tablelayout,我有一个大约有1k行的表,我想显示它。此任务显然会阻塞UI线程,导致onCreate()构建表时出现黑屏 我通过使用AsyncTask解决了这个问题,它在“doInBackground”函数中构建所需的TableLayout,并在“onPostExecute”函数中显示它 问题#1: 有没有我不熟悉的更好的做法 问题#2: 我的(简化的)“doInBackground”函数如下所示: protected Void doInBackground(Void... v) { tmpT

我有一个大约有1k行的表,我想显示它。此任务显然会阻塞UI线程,导致onCreate()构建表时出现黑屏

我通过使用AsyncTask解决了这个问题,它在“doInBackground”函数中构建所需的TableLayout,并在“onPostExecute”函数中显示它

问题#1: 有没有我不熟悉的更好的做法

问题#2: 我的(简化的)“doInBackground”函数如下所示:

protected Void doInBackground(Void... v) {

        tmpTableLayout = populateTable("");
        return null;
    }
protected void onPostExecute(Void v) {

        TableLayout ct = (TableLayout)findViewById(R.id.RealTable);
        ct.removeAllViews();
        /* WHATS HERE? */
    }
我的(简化的)“onPostExecute”函数如下所示:

protected Void doInBackground(Void... v) {

        tmpTableLayout = populateTable("");
        return null;
    }
protected void onPostExecute(Void v) {

        TableLayout ct = (TableLayout)findViewById(R.id.RealTable);
        ct.removeAllViews();
        /* WHATS HERE? */
    }
为了在“ct”中显示“tmpTableLayout”的内容,我应该写什么来代替最后一行代码中的“What at HERE?”


提前谢谢

您确定要一次显示所有内容吗

一种方法是在用户向下滚动时动态加载更多行。因此,有一个滚动监听器来检查用户是否正在接近显示内容的末尾,从而启动一个异步任务或加载更多内容的线程

例如:

我可能会使用
列表视图
游标适配器
,让Android为您管理获取数据。请参阅已接受的答案。

Hmmm。。。很有趣,但是你不觉得用户每次向下滚动时都要等待一点会更烦人吗?只要你根据开始前需要到达的行数来计划一个头部。但最终用户可能仍需要等待。只是为了方便起见,每次稍等一会儿,下次再等一会儿。我宁愿第一次等一小段时间。但这一切都取决于将显示什么样的数据,用户每次向下滚动的可能性有多大?我已经尝试过了,效果很好,谢谢!顺便说一句,我甚至没有注意到滚动时的最小延迟!数据从何而来?它在应用程序初始化时来自web,并存储在一个全局变量中。如果您将数据放入sqlite数据库,那么我的答案可能是最好的方法,否则,David Olsson的答案就是最好的方法。