Android:使用AsyncTask OnProgressUpdate的最佳方式

时间:2016-02-04 07:34:01

标签: android android-asynctask

我正在使用AsyncTask执行某些工作,我需要进度更新,但我不知道如何在此处获取进度更新。 dowork()可以执行任何任务,我需要对工作进行更新。谢谢您的帮助!

class MyTask extends AsyncTask<Integer, Integer, String> {
    @Override
    protected void doInBackground(Integer... params) {


        dowork();
             //how to return integer value of the progress here?
               }
    @Override
    protected void onPostExecute(String result) {
         txt.setText("done");
               }
    @Override
    protected void onPreExecute() {
        txt.setText("Starting...");
    }
    @Override
    protected void onProgressUpdate(Integer... values) {
        txt.setText("completed..."+ values[0]+"%");
            }
}

4 个答案:

答案 0 :(得分:2)

您可以像这样发布进度:

publishProgress(yourStatus);

将其写入doInBackground方法。你的onProgressUpdate似乎很好。

要从doWork方法调用publishProgress,您可以添加一个类似的抽象类:

public abstract class UpdateResult {
    public abstract void updateStatus(Integer status);
}

现在您将方法从doWork()更改为doWork(UpdateResult结果)并调用updateStatus方法,如下所示:

void doWork(UpdateResult result) {
.
. some work
.
result.updateStatus(50);
.
. 
}

并称之为:

doWork(new UpdateResult(){
@Override
public void updateStatus(Integer status){
       publishProgress(status)
}
});

示例(我没有测试过这个):

void doWork(UpdateResult result) {

for (int i = 0; i < 100; i++) {
    result.updateStatus(i);
}

}

class MyTask extends AsyncTask<Integer, Integer, String> {
    @Override
    protected String doInBackground(Integer... params) {

        doWork(new UpdateResult(){
        @Override
        public void updateStatus(Integer status){
               publishProgress(status);
        }
        });

     return "Done";
    }
    @Override
    protected void onPostExecute(String result) {
         txt.setText(result);
    }
    @Override
    protected void onPreExecute() {
        txt.setText("Starting...");
    }
    @Override
    protected void onProgressUpdate(Integer... values) {
        txt.setText("completed..."+ values[0]+"%");
    }
}

答案 1 :(得分:0)

您需要调用此方法http://developer.android.com/reference/android/os/AsyncTask.html#publishProgress(Progress...)

在doInBackground()内发送连续更新。

答案 2 :(得分:0)

你需要使用publishProgress(变量);变量是你的情况下的Integer对象。

答案 3 :(得分:0)

您可以使用publishProgress (Progress... values)doInBackground中发布值,这会调用onProgressUpdate方法