如何在无限循环中停止AsyncTask?

时间:2012-02-03 15:35:09

标签: android loops android-asynctask infinite

我有AsyncTask,我在后台的进展是无限循环。但是当用户停止我的应用程序或从我的应用程序返回时,我需要停止AsyncTask(我的应用程序转到前台)。我该怎么办?

解决方案:

  

private boolean done = false;

private class CurTask extends AsyncTask<String, Void, Object> {
        protected Void doInBackground(String... args) {
            while(!done){
                DefaultCurProgress();           
                publishProgress();
            }
        }

        protected void onProgressUpdate(Void...unused) {
            textCur = (TextView)findViewById(R.id.text_cur);

            SharedPreferences myPrefs = MyActivity.this.getSharedPreferences("myPrefs", MODE_PRIVATE);
            String prefNameDefaultCur = myPrefs.getString(DefaultCur, "");

            textCur.setText(prefNameDefaultCur); 
        }
}

@Override
    public void onPause(){
        super.onPause();
        done=true;
    }

    @Override
    public void onResume(){
        super.onResume();
        done=false;
    }

2 个答案:

答案 0 :(得分:4)

在AsyncTask中声明一个告诉它结束的方法。像这样:

private class CurTask extends AsyncTask<String, Void, Object> {
    private boolean done = false;

    public void quit() {
        done = true;
    }

    protected Void doInBackground(String... args) {
        while(!done){
            DefaultCurProgress();           
            publishProgress();
        }
    }

答案 1 :(得分:0)

添加一个布尔成员变量并在while条件中使用它而不是 true

然后当你需要取消它时你可以调用一个实例方法将这个变量设置为false,doInBackground方法将返回并且任务将完成。