Android publishProgress未被调用

时间:2014-02-05 11:12:12

标签: android multithreading android-asynctask

在搜索类似的线程后,仍然无法找到我的AsyncTask代码中的问题。

永远不会激活publishProgress方法,请使用断点进行检查。

这是AsyncTask类:

public class workerThread extends AsyncTask<Void, Integer, Void> {

    private int completed;

    protected void onProgressUpdate(int... arg0) {

        progressBar.setProgress(arg0[0]);
        statusView.setText(String.format("Completed %d", arg0[0]));

        return;
    }
    protected void onPreExecute(Void... unused) {

        completed = 0;
        progressBar.setProgress(completed);

        return;
    }

    protected Void doInBackground(Void... unused) {
        int l;

        for (int i=0; i < 100; ++i) {
            for (int n=0; n < 500; ++n) {
                for (int j=0; j <5000; ++j) {
                    l = n*j*i;
                }
            }
            completed++;
            publishProgress(completed);
        }
        return null;
    }

这是主UI线程的执行:

new workerThread().execute();

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:1)

这是文档给出的AsyncTask基本结构。

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
    protected Long doInBackground(URL... urls) {
    int count = urls.length;
    long totalSize = 0;
    for (int i = 0; i < count; i++) {
            totalSize += Downloader.downloadFile(urls[i]);
            publishProgress((int) ((i / (float) count) * 100));
            // Escape early if cancel() is called
            if (isCancelled()) break;
        }
        return totalSize;
    }

    protected void onProgressUpdate(Integer... progress) {
        setProgressPercent(progress[0]);
    }

    protected void onPostExecute(Long result) {
        showDialog("Downloaded " + result + " bytes");
    }
}

这与你的唯一区别在于AsyncTask类的内部函数所期望的参数与你声明的参数之间的不匹配。

您声明了protected void onProgressUpdate(int... arg0),但您的班级希望获得Integer值,而不是基本类型int

尝试更改它并再次运行。

问候!