Вход в статистику
Логин:
Пароль:
Забыли пароль?
www.realnetspb.ru



Подключиться

409-00-09
info@realnetspb.ru support@realnetspb.ru
служба технической поддержки
Обратная связь





Высокоскоростной Интернет для дома и офиса ● Цифровое IPTV ● Бесплатное подключение ● Бонусы и акции
Круглосуточная техническая поддержка ● Компьютерная помощь на дому ● Беспроводной доступ Wi-Fi
Личный кабинет

Черный конверт

29.07.2016

Реализация AsyncTask проста и очевидна: создать производный черный конверт, переопределить doInBackgroundf) для выполнения в фоновом режиме и добавить вспомогательные методы для обновления пользовательского интерфейса до, во время и после выполнения задачи в фоновом режиме. Но, несмотря на кажущуюся простоту, здесь есть несколько аспектов, требующих особого внимания:

необходимость избегать утечек памяти - пока существует рабочий поток, все объекты, на которые он ссылается, хранятся в общей памяти. Следовательно, AsyncTask должен объявляться как абсолютно независимый или статический внутренний класс, чтобы избежать неявных ссылок из рабочего потока во внешние классы;

объединение с Context и его жизненным циклом - обычно AsyncTask передаёт в UI-поток обновления, которые могут ссылаться на Context, чаще всего на компонент Activity с иерархией представлений. Но настоятельно рекомендуется не пользоваться ссылками на иерархию представлений, чтобы эти представления не оставались в памяти, когда они уже не нужны. Следовательно, AsyncTask должен объявляться как статический внутренний класс, содержащий ссылку только на связанный с ним Context. Когда необходимость в этой ссылке отпадает, она удаляется присваиванием ей значения null;

Передача массива адресов URL в метод doInBackgroundO.

При уничтожении компонента Activity задача AsyncTask отменяется, а ссылки из этой задачи на уничтоженный компонент обнуляются и становятся доступными сборщику мусора, несмотря на то что рабочий поток продолжает существовать.

Определение AsyncTask: массив объектов String передаётся в метод doInBackgroundf), а объекты Bitmap возвращаются во время выполнения в фоновом режиме. Фоновый поток не передаёт напрямую результат в UI-поток, поэтому последний параметр объявлен как Void.

Ссылка на Activity для выполнения обновлений в U 1-потоке.

Метод записи (setter) для изменения или обнуления ссылки па Activity. Activity изменяется при изменении конфигурации с сохранением состояния текущей задачи.

Вывод индикатора выполнения перед началом работы фоновой задачи.

Проверить, не была ли задача отменена перед началом загрузки следующего изображения, чтобы можно было завершить задачу как можно раньше.

Загрузка изображения из сети и присваивание его аргументу типа Bitmap для передачи в AsyncTask.

Передача изображения в Ш-поток.

Реакция на изменение состояния, полученное из фонового потока, - обновление индикатора выполнения и вывод нового изображения на экран.

Удаление индикатора выполнения.








 
© 2001-2014 ООО Реалнет-СПб
Услуги: бесплатное подключение к Интернет, цифровое IPTV, каналы в HD-качестве, ПО по подписке: антивирусы и родительский контроль,
служба технической поддержки и компьютерной помощи, настройка Wi-Fi - роутера, подключение Wi-Fi.