Android AsyncTask的onProgressUpdate不起作用

3

我有一个类里面的AsyncTask,我希望它在执行的同时显示进度。但是它没有输出日志。

private void registerBackground() {
    new AsyncTask<Void, Integer, String>() {

        @Override
        protected String doInBackground(Void... params) {
            Log.v("TAGGG", "IN doInBackground");
            msg = "Error: ";

            return msg;
        }

        @Override
        protected void onProgressUpdate(Integer... progress) {
            super.onProgressUpdate(progress);
            Log.v("TAGGG", "Progress: " + progress[0] + "%");
        }

        @Override
        protected void onPostExecute(String msg)
        {
            Log.v("TAGGG", msg);
        }
    }.execute();
}
1个回答

9
你需要使用publishProgress()方法:http://developer.android.com/reference/android/os/AsyncTask.html#publishProgress(Progress...) 这个方法可以在doInBackground(Params...)中被调用,以便在后台计算仍在运行时在UI线程上发布更新。每次调用此方法都会触发onProgressUpdate(Progress...)在UI线程上的执行。如果任务已被取消,则不会调用onProgressUpdate(Progress...)。
    @Override
    protected String doInBackground(Void... params) {
        Log.v("TAGGG", "IN doInBackground");
        msg = "Error: ";
        int i = 0;
        while (i <= 50) {
            try {
                Thread.sleep(50);
                publishProgress(i);
                i++;
            }
            catch (Exception e) {
                Log.i(TAGGG, e.getMessage());
            }
        }
        return msg;
    }

1
为什么要使用 while 循环?还有为什么要用 sleep?这不会使它变慢吗? - Pramod Ravikant
2
@micro.pravi 在Asynctask中的目标是模拟一个长线程(下载数据,解析大文件)并向用户显示进度。sleep不应该在生产代码中使用! - Waza_Be

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接