GetLayoutInflater против LayoutInflater.from

Изучая некоторый (известный как хороший) код, я вижу логику следующим образом:

if (getContext() instanceof Activity) { inflater=((Activity)getContext()).getLayoutInflater(); } else { inflater=LayoutInflater.from(getContext()); } 

Интересно, почему это, if/else , как это лучше, просто используя LayoutInflater.from во всех случаях?

Это не имеет большого значения.

Делегаты деятельности getLayouInflater() для Window . Обычная реализация политики Window PhoneWindow в свою очередь, инициализирует его надув с помощью LayoutInflater.from(context) где context является активностью.

Таким образом, объект надувных объектов на самом деле тот же, используя тот же Context в случае активности.

LayoutInflater.from() действительно является оболочкой для Context.getSystemService() . Теперь системные службы просматриваются по имени с карты, а затем извлекаются из кеша . Этот поиск имеет некоторые накладные расходы по сравнению с доступом к уже инициализированной переменной-члену в Activity .

Таким образом, он пахнет микро-оптимизацией, которая вряд ли повлияет на производительность во время исполнения по сравнению с фактической инфляцией иерархии просмотров.

Эта оптимизация может фактически отрицательно влиять на производительность разработчиков, так как людям нужно остановиться и потратить некоторое внимание на то, почему код существует.

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

Единственное изменение, которое я сделал бы, это сохранить контекст в переменной, чтобы предотвратить вызов одной и той же функции и повторное извлечение одного и того же значения из объекта:

 Context ctx = getContext(); if(ctx instanceof Activity) { inflater = ((Activity)ctx).getLayoutInflater(); } else { inflater = LayoutInflater.from(ctx); } 

У Android есть много оптимизаций для повторного использования элементов, когда они доступны, например представления для ListViews, которые могут быть повторно использованы.

Intereting Posts
Извлеките системный путь изображения контакта с Android по умолчанию (адрес) Задержка при замене фрагмента ViewPager в панели навигации над FrameLayout? Захват EditText Lost Focus API UI для libgdx Прочтите системный журнал на Android 4.1 Окно утечки при выходе из приложения (всплывающее) меню Как определить, сколько текста будет вписываться в TextView в Android? Ошибка при установке apk – анализ пакета Ящик для навигации с крутильным краем в android Ошибка утверждения в Android Studio при попытке скомпилировать рабочий проект Как ограничить ближайший поиск местоположения в соответствии с текущим местоположением, используя карты google в android? Пользовательский XML-парсер Android не разрешает пространство имен android Как добавить строку между элементами в строке заголовка меню приложения в Android Studio? Gradle sync failed, NDK не настроен, загрузите его с помощью менеджера SDK Java.lang.NoClassDefFoundError: android.os.AsyncTask