首页 > 解决方案 > 从 AsyncTask 更新 UI 挂起 SwipeRefreshLayout 加载圈

问题描述

我创建了一个通用的 AsyncTask。它在后台运行良好,但是当我在此任务的 doInBackground 回调中更新 UI 时,它只是多次挂起 SwipeRefreshLayout 的加载圈。我需要这个加载才能顺利运行。我正在使用 AsyncTask 如下

public class backgroundWorker extends AsyncTask<Object, Void, Object>{//params, progress, result
    backgroundWorkerCallback callback;
    public backgroundWorker(backgroundWorkerCallback _callback)    {
        this.callback = _callback;
    }
    @Override
    protected void onPostExecute(Object result) {
        super.onPostExecute(result);
        callback.onPostExecute(result);
    }
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected Object doInBackground(Object... param)
    {
        return callback.doInBackground(param);
    }
}

backgroundWorkerCallback 是一个接口

public interface backgroundWorkerCallback {

    public Object doInBackground(Object param);
    public void onPostExecute(Object result);
}

我以这种方式使用这个 AsyncTask

srlStockReport.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        backgroundWorker bw = new backgroundWorker(new backgroundWorkerCallback(){
            @Override
            public Object doInBackground(Object param)
            {
                //fetch data from server
                //put some data in in Preference
                //Load a RecyclerView from list

                return null;
            }
            @Override
            public void onPostExecute(Object result)
            {

            }
        });
        bw.execute();
    }
});

标签: androidandroid-asynctaskswiperefreshlayout

解决方案


推荐阅读