Как остановить AsyncTask в бесконечном цикле? - PullRequest
0 голосов
/ 03 февраля 2012

У меня 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 ]

4 голосов
/ 03 февраля 2012

Объявите метод в вашей 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();
        }
    }
0 голосов
/ 03 февраля 2012

Добавьте переменную логического члена и используйте ее в условии while вместо true .

Затем, когда вам нужно отменить его, вы можете просто вызвать метод экземпляра, чтобы установить для этой переменной значение false, метод doInBackground вернется и задача завершится.

...