2015-04-27 2 views
0

У меня есть 56, доступных в моей папке res.
Я использую их в 2 фрагментах.Static drawable array через все приложения для Android

Является ли хороший подход к памяти для создания класса, который имеет статический массив, содержащий эти чертежи, и вызывает его метод get всякий раз, когда я хочу его использовать?
Или Должен ли я создавать частный массив в каждом фрагменте?

+1

Android автоматически кэширует чертежи, полученные из XML. Вам не нужно создавать свой собственный кеш. – alanv

+0

Да, я знаю это, но мне нужно установить изображения 57 команд в gridview один раз и в списке. Listview извлекает данные с сервера, у которого есть номер логотипа в массиве, чтобы установить его в адаптаторе – busted13

+1

О, в этом случае вы также можете создать статический массив. Массив из 56 ints в основном ничего в великой схеме вещей. Вы не будете его модифицировать, не так ли? – alanv

ответ

0

вы должны создать частные фрагменты в фрагменте. Наличие их всех в другом классе означает, что они никогда не будут уничтожены даже тогда, когда вы не используете их, занимая память. Кроме того, статические массивы будут удалены, когда приложение будет слишком долго работать в фоновом режиме, поэтому вам понадобится дополнительный код для перезагрузки массива при возобновлении, если массив равен нулю.

+0

Итак, наличие частного массива ресурсов в каждом классе (у меня есть два класса с использованием ресурсов) было бы лучше, чем создание одного статического массива в надежном классе и просто вызвать его всякий раз, когда я захочу? – busted13

+0

И если бы я сделал ваш ответ, не считалось ли это уродливым кодированием? как 57 строк, повторяющихся в каждом классе? Извините, если я попрошу слишком много :) – busted13

+0

, вы определенно не должны иметь этого в каждом классе. Вы должны спросить себя, почему вам нужно много изображений в массиве. Я бы поспорил, что путь пытается сделать что-то, что можно сделать более эффективно. Если вы используете одни и те же изображения в обоих фрагментах, и 57 из них, вероятно, что-то не так. можете ли вы расширить то, что вы пытаетесь достичь? –

0

Вы можете просто создать статический массив int, используя идентификаторы ресурсов, вот пример:

public static final int[] DRAWABLE_ARRAY = { 
    android.R.drawable.sym_def_app_icon, 
    android.R.drawable.title_bar, 
    android.R.drawable.ic_menu_compass 
}; 

Тогда использование этого массива может быть что-то вроде этого:

for (int i = 0; i < DRAWABLE_ARRAY.length ; i++) { 
    context.getResources().getDrawable(DRAWABLE_ARRAY[i]); 
} 

таким образом, вы не создаете объекты, которые занимают приличное количество памяти, так как это только ресурсы ids

+0

Я делал в основном то же самое в классе, который имеет только массив ресурсов в качестве объекта и продолжал называть его, когда я этого хочу. Но похоже, что он потребляет память – busted13

Смежные вопросы