Могут ли загрузчики Honeycomb решить проблемы с обновлением AsyncTask + UI?

Выполнение чего-либо в фоновом режиме с последующим обновлением пользовательского интерфейса очень сложно правильно реализовать в Android. Просто он плохо спроектирован. Типичный пример - AsyncTask, который извлекает что-то из Интернета и отображает результат. С этим связаны две проблемы:

  1. AsyncTask имеет ссылку на Activity (потому что ему необходимо обновить свой пользовательский интерфейс). После изменения ориентации экрана действие перезапускается. Но AsyncTask по-прежнему ссылается на старую уничтоженную Activity, поэтому она не может обновить пользовательский интерфейс нового Activity.

  2. Это может привести к OutOfMemoryException. Представьте, что у вас есть Activity с большим количеством растровых изображений, и вы запускаете AsyncTask. Вы нажимаете BACK (действие завершено), но AsyncTask все еще выполняется, и поскольку он ссылается на Activity, действие с растровыми изображениями все еще находится в памяти. Повторите это (начните Activity и BACK), и у вас рано или поздно сила закроется.

Это можно решить, но это слишком сложно. В одном действии у меня есть 3 разных AsyncTasks, каждая из которых может работать в нескольких экземплярах одновременно. Правильная реализация этого разочаровывает. Код становится действительно трудным для понимания и отладки.

Могут ли Сотовые загрузчики как-то решить эту проблему? И есть ли способ использовать их в версиях Android, предшествующих Honeycomb?

13
задан HitOdessit 17 April 2013 в 12:58
поделиться