-1

我在我的应用程序中使用带有图像的自定义列表视图,并从 json url 加载所有数据。

我创建了一个 onscrolllistener()

当用户滚动到列表视图的底部时,它会自动在当前数据下方添加数据。

但是当我的数据加载整个列表视图时,会冻结 2-3 秒。

不知道怎么回事??

这是我的 AsyncTask 代码

private class BackgroundLoadMore extends AsyncTask<Void, Void, Void> {

          @Override
            protected void onPreExecute() {
                // Showing progress dialog before sending http request


            }

        protected Void doInBackground(Void... unused) {
            runOnUiThread(new Runnable() {
                public void run() {

                    LoadData();


                            list.setOnScrollListener(new EndlessScrollListener());
                }
            });
            return (null);
        }

        protected void onPostExecute(Void unused) {
            // On completing background task
            // closing progress dialog etc,.


        }
4

4 回答 4

4

您必须从主 UI 线程中的 url 获取 json 数据。这会阻止 UI 被系统更新,因此会冻结。使用AsyncTask在后台执行此类网络任务。

LoadData()应该在后台线程中调用,即 asynctask 的 doInBackground()。您的调用 runOnUIThread 将其放回 UI 线程,并且您不想要。runOnUIThread从 asynctask中删除调用。

     protected Void doInBackground(Void... unused) {
        LoadData();

        return (null);
    }

   protected void onPostExecute(Void unused) {
        // On completing background task
        // closing progress dialog etc,.

        list.setOnScrollListener(new EndlessScrollListener());

    }
于 2012-07-26T11:24:01.043 回答
1

搬出LoadData();_

runOnUiThread(new Runnable() {
    public void run() {}
};
于 2012-07-26T11:37:57.647 回答
0

您可能正在 UI 线程中加载数据。

由于从 Internet 加载 JSON 数据等操作很慢(通常为 0.5-10 秒),因此如果您在应用程序的主线程中执行此操作,则用户界面将在此时停止响应。您应该使用 Thread 或 AsyncTask 异步加载 JSON 数据,从而使 UI 线程可以自由响应用户输入(例如滚动列表)。

我的建议是您使用 AsyncTask 来加载数据。

以下是一些链接:


编辑

放入list.setOnScrollListener(new EndlessScrollListener());list.notifyDatasetChanged();里面onPostExcecute();

于 2012-07-26T11:24:37.707 回答
0

doInBackground 正在工作线程中执行,但在其中您使用 runOnUiThread 来启动 UI therad 操作。

您必须在后台线程中从网络加载所有数据,然后在 postExecute 中更新您的列表视图

于 2012-07-26T11:29:39.000 回答