В конце концов, я решил полностью игнорировать ошибку утилизации.он просто добавляет слой невозможных трудностей поверх управляемого процесса.
Без этого бремени (просто прекращая показ изображений на адаптерах и т. д.), я создал менеджер, использующий Map<String, SoftReference<Bitmap>>
для хранения загруженных растровых изображений под URL-адресами.
Кроме того, 2-4 AsyncTasks (использующие как doInBackground, так и onProgressUpdate; остановлены добавлением специальных заданий, которые выдают InterruptedException), берущие задания из LinkedBlockingDeque<WeakReference<DownloadingJob>>
, поддерживаемого WeakHashMap<Object, Set<DownloadingJob>>
.
Deque (код LinkedBlockingDeque, скопированный для использованияв более раннем API) - это очередь, в которую могут уходить задания, если они больше не нужны.В качестве ключей на карте есть создатели заданий, поэтому, если адаптер требует загрузки, а затем удаляется, он удаляется с карты и, как следствие, все его задания исчезают из очереди.
Задание будет, если изображение уже присутствует, вернуться синхронно.он также может содержать набор данных, который может идентифицировать, какое положение в AdapterView это касается.
Кэширование также выполняется на SD-карте, , если доступно , под URLE-кодированными именами.(очищено частично, начиная с самого старого, при запуске приложения и / или с помощью deleteOnExit ()
запросы включают в себя «If-Modified-Since», если у нас есть кэшированная версия, для проверки обновлений.
то же самое можно использовать и для синтаксического анализа XML, а также для получения большинства других данных.
Если я когда-нибудь очистлю этот класс, я опубликую код.