Жизненный цикл ListAdapter и поворот экрана для отмены AsyncTask - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть асинхронная задача, которую я отменяю, когда представление уничтожается через onDestoryView (). Эта проблема я делаю "downloader.cancel (true);" и это не отменит. На самом деле, он вернет false. В настоящее время он ссылается на ListAdapter для добавления элементов в него. Однако, когда я поворачиваю экран в альбомную ориентацию, ListAdapter становится пустым во время onPostExecute. Я не могу понять, когда ListAdapter становится нулевым. Я попытался и onDestory и onDestoryView отменить асинхронную задачу, прежде чем ListAdapter станет нулевым, но он никогда не работает. Это внутри ListFragment между прочим.

В настоящее время я просто проверяю, является ли адаптер нулевым в асинхронной задаче, но это действительно раздражает мои механизмы. Я бы предпочел просто отменить задачу до того, как ListAdapter станет нулевым.

Кто-нибудь знает, когда ListAdapter является нулевым для ListFragment во время поворота экрана?

Ответы [ 2 ]

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

Отмена AsyncTask действительно не уничтожает поток.В документах для Thread вы увидите, что такие методы, как stop и destroy, не реализованы.Поэтому, как только метод doInBackground начнет выполняться, он будет выполняться до завершения, даже если задача отменена с помощью cancel (true) .Вам нужно будет кодировать его соответствующим образом.

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

При изменении ориентации экрана поведение по умолчанию - уничтожить действие и воссоздать его. Поэтому будут вызваны методы OnDestroy и OnCreate. Вы можете отменить это поведение, добавив следующую строчку в активность вашего манифеста:

андроид: configChanges = "keyboardHidden | ориентация"

Вот так:

    <activity
        android:name=".YourActivity"
        android:label="@string/app_name"
        android:configChanges="keyboardHidden|orientation" >

Вам также необходимо добавить метод onConfigurationChanged в ваш класс активности.

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig); // tem que ter

    reconfiguraInterface();
}

После этого OnDestroy и OnCreate не будут вызываться при изменении ориентации.

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