#android
#Android
Вопрос:
Я хочу создать служебный класс, который загружает изображения, содержащиеся в структуре ресурсов / файлов. Было бы утомительно требовать, чтобы все вызовы к нему или любому другому служебному классу, вызывающему его, передавали контекст полностью из пользовательского интерфейса.
Можно ли было бы просто передать ее один раз и сохранить (при условии, что служебный класс является статическим или одноэлементным)? Или это будет иметь разрушительные последствия с точки зрения памяти?
Кроме того, чтобы никто не спрашивал, я использую assets / folder вместо res /, потому что мне нужны вложенные папки и для динамического доступа к изображениям по имени, чего я не могу сделать, используя ресурсы, насколько мне известно. Например, я хочу, чтобы мой объект sprite загружал все изображения в папку конкретного спрайта, а не жестко кодировал R.drawable.sprite1front, R.drawable.sprite1leftside и т.д.
* редактировать — Копирование AssetManager также было бы неплохо, если это можно сделать.
Ответ №1:
Вы можете использовать одноэлементный или статический класс для своего служебного класса, но вы должны инициализировать его ссылкой на объект приложения, а не на действие. (Сохранение ссылки на действие — хороший способ утечки памяти.) Лучшим способом может быть создание подкласса Application и использование его в качестве служебного класса. Вам нужно будет объявить свой класс приложения в манифесте.
Комментарии:
1. Хм, это хороший момент. Я не думал о сохранении ссылки на само приложение, поскольку это всегда будет существовать в жизненном цикле служебных классов.
2. На самом деле, это все еще меня беспокоит. Похоже, что Android вынуждает вас полностью нарушать базовые объектно-ориентированные принципы. Я не хочу, чтобы служебный класс имел доступ ко всем контекстам или приложениям. Все, что ему нужно, это способ доступа к сохраненным данным.