Вы можете найти какой-либо взломать (в том числе заглушить изменения конфигурации или сохранить экземпляр), чтобы как-то заставить его работать, но действительно AsyncTask
s are evil, и вы должны оставаться как можно дальше от него.
Если ваше текущее задание AsyncTask
должно загрузить некоторые данные из сети, прежде чем показывать их внутри вашего Fragment
, я бы рекомендовал использовать AsyncTaskLoader
. Примеры в javadoc должны дать вам хорошее представление о том, как его реализовать.
Это позволит сетевому запросу продолжать движение во время поворота, чтобы уведомить пользовательский интерфейс (то есть LoaderManager.LoaderCallbacks
) с результатом только тогда, когда он готов к его обработке (например, при вращении, например), а также будет кэшировать результат, чтобы вы не повторно запрашивали сетевой запрос каждый раз, когда вам нужны данные.
Есть куча сторонних библиотек, пытающихся решить эту очень распространенную проблему, и Loader
также имеют свои тонкости, но если я правильно понимаю ваш пример использования, это должно быть именно то, что вам нужно.
Не забывайте, что любое решение, которое вы выберете, должно будет учитывать ротацию (действие уничтожить/воссоздать), которое происходит до, во время и после загрузки данных.
Ориентация изменения экрана вызывает onCreate(). Если вы хотите избежать перезапуска asyncTask, поставьте его на onResume или попытайтесь избежать onCreate при изменении ориентации. –
Или сохраните состояние задачи async, а затем, при перезапуске, продолжите работу с той точки, в которой вы ее оставили – Massimo