在doInBackground中取消后,Asynctask不会停止

时间:2017-03-08 12:42:40

标签: java android android-asynctask

我试图编写一个进度条,它会根据计时器而增加(从0开始并上升到我选择的某个时间)。 当我单击按钮时,进度条会减小(从值[0] - 5减少)。 当进度条值为30时,我想停止进度条,所以停止asynctask,然后重新启动它,使进度条值现在为0.

我的代码没有任何错误,问题是进度条没有停止并且没有重启。 (我知道因为我做了一个TOAST来打印进度条的值,它永远不会停止)

这是我在MainActivity中的代码

公共类MainActivity扩展了Activity {

ProgressBar progressBar_eau;

TextView txt;
int compteur = 0;

Button btn_arrosoir; 

MyTask task_eau;
Boolean restart = true;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn_arrosoir = (Button) findViewById(R.id.btn_arrosoir);//my button when you click the progress bar decreases
    progressBar_eau = (ProgressBar) findViewById(R.id.barre_eau);
    progressBar_eau.setMax(30);
    Drawable draw3=getResources().getDrawable(R.drawable.custom_eau);
    progressBar_eau.setProgressDrawable(draw3);

    progressBar_eau.setProgress(0);

    task_eau = new MyTask(progressBar_eau);
    task_eau.execute(300);

    btn_arrosoir.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //OnCLick Stuff
            compteur = compteur - 5;

        }
    });

}


public void cancelAsynctask(){
    if (restart == false){
        task_eau.cancel(true);
        restartAsynctask();
        Toast.makeText(MainActivity.this,
                        "cancel", Toast.LENGTH_LONG).show();
        restart = true;
    }

}

public void restartAsynctask(){
    task_eau = new MyTask(progressBar_lumiere);
            task_eau.execute(300);
            Toast.makeText(MainActivity.this,
                    "restart", Toast.LENGTH_LONG).show();//my emulator shows both message start and restart even though the progress bar doesn't stop
}

public class MyTask extends AsyncTask<Integer, Integer, String> {

    ProgressBar progressBar_actuelle;
    public MyTask(ProgressBar target) {
        progressBar_actuelle = target;

    }


     @Override
            protected String doInBackground(Integer... params) {


            while (task_eau.isCancelled() == false){
                for (; count <= params[0]; count++) {

                    try {
                     Thread.sleep(1000);
                                                publishProgress(count);

                                            } catch (InterruptedException e) {
                                                e.printStackTrace();
                                            }
                }
                }

                return null;
            }

    @Override
    protected void onPostExecute(String result) {

    }



    @Override
    protected void onProgressUpdate(Integer... values) {

        progressBar_actuelle.setProgress(values[0]+compteur);

        if (progressBar_actuelle.getProgress() >= 30){
            restart = false;
            cancelAsynctask();
        }

    }
}

}

1 个答案:

答案 0 :(得分:0)

我认为问题在于AsyncTask.Remove中声明的Progressbar,并且直接使用onCreate方法中创建的progressbar对象。我还观察到你没有在代码中的任何一点解雇进度条。也请看一下。