Как заставить AsyncTask отменить себя после завершения действия - PullRequest
0 голосов
/ 18 марта 2011


Я разрабатываю функцию ListActivity, в которой в каждом элементе списка отображается информация.
После сбора данных для отображения в каждой записи списка (миниатюра с SD-карты и подсчет изБД) занимает много времени, я думал об использовании AsyncTasks, чтобы освободить основной поток от нагрузки и позволить пользователю действительно быстро прокручивать список без задержки.

Я думал об использовании тегапросмотры в моей записи, чтобы отменить AsyncTasks записей, которые повторно используются после прокрутки за пределы экрана.
что-то вроде:

public void bindView(View view, Context context, Cursor cursor) {
    [...]
    MyAsyncTask t (MyAsyncTask) myImageView.getTag();
    if (t != null) {
        t.cancel(true);
        t = null;
    }
    t = new MyAsyncTask();
    myImageView.setTag(t);
    t.execute();
    [...]
}

Эта часть должна работать, но моя проблема в том, когда заканчивается действие или пользовательменяет ориентацию.Я бы предпочел избегать хранения массива или хэш-карты моих AsyncTasks, чтобы иметь возможность отменить их все в onPause или onStop.
Из чтения, которое я сделал в Интернете, AsyncTasks продолжит работать в фоновом режиме после изменения ориентацииили задание заканчивается, и даже в худшем случае оно будет поддерживать активность в действии, предотвращая сбор мусора (что, безусловно, не то, что я хочу).

Любые идеи или предложения о том, как я могу это сделать?
Должен лиЯ использую что-то кроме AsyncTasks?

1 Ответ

0 голосов
/ 18 марта 2011

Я бы рассмотрел замену массива AsyncTask s на один AsyncTask. onProgressUpdate может помочь здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...