2020 бросить курить производителей, 11 Оптимизация производительности Android будет сталкиваться с вопросами вам один?

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

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

  • Ссылка ответ:
    • Во-первых, мы должны очистить кэш три уровня является картина того, как

       

       

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

2, PNG загружаются в память, если изображение с высоким разрешением 500 * 500. Должно быть количество занимаемой памяти?

  • Ссылка ответ:
    • Независимо от экрана , чем слова : занимают память = 500 * 500 * 4 = 1000000B ≈ 0.95MB
    • Рассмотрим случай , когда отношение экрана : память для пикселя ширина = х (inTargetDensity / inDensity) х высота х пикселей (inTargetDensity / inDensity) х байт памяти занято размером пикселя

inDensity целевая картина представлена ​​точек на дюйм (какие файлы ресурсов в папке), inTargetDensity указывает целевой экран точек на дюйм

 

3, оптимизация производительности WebView?

  • Ссылка ответ:
    • Процесс загрузки веб-страницы, родной, сеть, фоновым обработки, процессор будет участвовать, каждый из них имеет необходимую работу и зависимостей, пусть они взаимно параллельной обработки, а не блокировать друг друга, прежде чем они могут сделать веб-страницы загружаются быстрее:
      • инициализация WebView медленно, вы можете одновременно запрашивать данные в первой инициализации, так что серверная сеть и не простаивает.
      • JS общая локализация и отложенная загрузка, используйте ядро ​​браузера стороннего
      • Медленная фоновая обработка, вы можете иметь выход к югу от хобота сервера, в то время как на заднем конце передней части расчета также загружаются с статическими сетевыми ресурсами.
      • Выполнение скрипта происходит медленно, пусть скрипт запуска в финале, не блокировать резолюцию страницы.
      • В то же время, разумно заранее нагрузки, предварительно кэширование позволяет скорость загрузки узких мест меньше.
      • инициализация WebView медленно, это хорошо в любое время, чтобы инициализировать WebView стенд.
      • DNS ссылки и медленно, думать о путях к области повторного использования и ссылок, используемых клиентом.

4, Bitmap, как обрабатывать большую картину, например, большую картину 30M, как предотвратить OOM?

  • Ссылка ответ: чтобы избежать проблем OOM должен быть загружен на общей картине управления, главным образом путем масштабирования изображения, чтобы уменьшить объем памяти.
    • BitmapFactory предлагает четыре типа метода для загрузки изображения ( decodeFile, decodeResource, decodeStream, decodeByteArray ) параметры поддержки BitmapFactory.Options, вы можете легко картина параметров выборки масштабируетесь inSampleSize
    • Например, 1024 1024 для высокой четкости изображения. Он занимает памяти 1024 1024 4, то есть 4MB, если inSampleSize является 2, то выборка изображения памяти только 512 512 4, то есть 1 МБ ( Примечание: Согласно последним официальным государствам документации, значение всегда должен inSampleSize индекс 2, т.е. 1,2,4,8 и т.д., если внешний вход меньше 2 индекса, система по умолчанию , чтобы выбрать ближайшую степень двойки , а не, скажем , 2 *)
    • Рассмотренный. Путем отбора проб скорости можно эффективно загрузить изображение, процесс выглядит следующим образом
      • Параметр inJustDecodeBounds BitmapFactory.Options устанавливаются истинное и нагрузки изображения
      • BitmapFactory.Options изображение, полученное из исходной ширины и высоты информации, которые соответствуют outWidth параметры и outHeight
      • Регулярная частота дискретизации и требуемый размер View связывания целевой частоты дискретизации вычисляется inSampleSize
      • В BitmapFactory.Options из inJustDecodeBounds параметра на ложную, перегрузочной картинку

5, механизм восстановления памяти и алгоритм GC (преимущества и недостатки различных алгоритмов и сценариев); ГХ и ГХ объектов принципе возможность

  • Ссылка ответ:
    • Определение памяти объект для повторного использования Существует два механизма:
      • Алгоритм Подсчет ссылок : добавление ссылки на счетчик объекта, всякий раз , когда ссылка на его месте, значение счетчика увеличивается на 1; когда речь идет о неспособности, значение счетчика уменьшается на 1; в любое время объект счетчика больше не равно 0 использовать. Тем не менее, выбор алгоритма подсчета ссылок не в мейнстриме виртуальной машины Java для управления памятью, в основном потому , что трудно решить между объектами каждой круговой ссылочной проблемой, так что был еще один алгоритмом решения выживания цели.
      • Анализ достижимости : Через ряд объектов называются «GCRoots» в качестве отправной точки, чтобы начать поиск вниз от этих узлов, называемый поисковым путем , пройденная цепью ссылок , когда объект не имеет ссылок на GC Roots цепи при подключении, доказательство этого объекта отсутствует. В котором в качестве объекта GC Roots: ссылки на объекты ВМ стека, в основном относится к стеку кадру локальных переменному , нативный метод стека Native метод объекта ссылочных методов зоны класс статических ссылок на объекты атрибутов, метод площадь постоянная * ссылка на объект
    • Алгоритм сбора GC имеет следующие четыре:
      • Алгоритм сбора Generational : алгоритм в настоящее время используется в коммерческих виртуальных машинах, в зависимости от предмета периода выживания, куча Java делится на старое и новое поколение, и принять наиболее подходящий метод сбора на основе характеристик каждой эпохи.
      • Кайнозойская: большое количество мертвых объектов, лишь немногие выживают. Используйте «алгоритм репликации», только небольшое количество живых объектов может быть скопировано.
        • Алгоритм репликации : на емкость доступной памяти делится на два одинакового размера, использует только один из них. Когда один выбегает из памяти, объект все еще жив «Копировать» в другой части выше, то этот кусок пространства памяти , как только рассеялся. Простая, эффективная работа. Дополнительные операции копирования будет осуществляться при более высокой цели выживания, эффективность будет низкой
      • Старый год: высокий уровень выживаемости объекта. Использование «марки - очистка алгоритма» или «знак - алгоритм сортировки», только менее значительное восстановление объекта может быть.
        • Марк - алгоритм развертки : первый «тег» все нужно восстановить объект, а затем объединил «Clear» все объекты отмечены. Марк и эффективность развертки , когда два процесса не высоки, большое количество дискретной фрагментации памяти после очистки космического мусора слишком много , может привести к более позднему необходимости выделять большие объекты в программе работает, вы не можете найти достаточно непрерывной памяти и Мы были вынуждены вызвать другое действие сбора мусора.
        • Марк - Упорядочение Алгоритм : Первый «тег» все объекты должны быть восстановлены, а затем «Обновить», так что выживание объекта движутся к одному концу, и , наконец , вычистить памяти непосредственно за пределами терминала границы. Метки организовать алгоритм будет все живые объекты , чтобы перейти к концу, и не выжить объект обрабатывается, так что это не фрагмент памяти

6, утечка памяти и разница переполнения памяти? AS Какие инструменты доступны для обнаружения утечек памяти

  • Ссылка ответ:
    • Переполнение памяти (из памяти) : относится к программе в момент памяти приложения, не хватает мест в памяти для ее использования, появляется из памяти, например, применять для целого, но сохранить его для того , чтобы сохранить достаточно несколько длинных, то есть, переполнение памяти.
    • Утечки памяти (Memory Leak) : относятся к программе после того, как в памяти приложения , чтобы освободить память была подана, а опасность утечки памяти может быть проигнорирована, но накопление утечек памяти очень серьезные последствия, независимо от того , сколько памяти, рано или поздно оккупировала свет. утечка памяти в конечном счете приведет к из памяти!
    • Найти Утечки памяти можно использовать Android Studio поставляется с AndroidProfiler инструментом или MAT

7, оптимизация производительности, как убедиться, что приложение не запускается Катон? Черный и белый экран, как бороться с?

  • Ссылка ответ:
    • скорость запуска приложений , в зависимости от того, что вы сделали вещи в приложении , которое, когда вы интегрировать так много SDK, SDK и операцию инициализации необходимо достичь , так что будет Катон чувства в основном потоке. Нагрузка может быть отсрочена или суб-потоковый включен в не-необходимости
    • Кроме того, влияние интерфейса Катон два фактора, а именно чертеж интерфейса и обработки данных.
      • Оптимизация компоновки (использование включает, Объединить тег, сложный макет рекомендуется ConstraintLayout и т.д.)
      • OnCreate () не выполнять трудоемкую операцию из шоу Просмотра страниц разбивки, что в AsyncTask постепенно показал лучше с обработчиком. Таким образом, пользователи видят там много уровней есть шаги, один за другим видом дисплея не будет первым, чтобы увидеть черный экран, а затем нажмите кнопку Показать все View. Лучше всего, чтобы анимировать эффект является более естественным.
      • Цель использования многопоточности уменьшить максимально OnCreate () и onReume () время, так что пользователь может видеть страницу, операцию страницы как можно скорее.
      • Уменьшение основного времени блокировки резьбы.
      • Адаптер и повысить эффективность AdapterView.
    • Черно-белый экран Причина : Когда мы запустить приложение, система проверяет , есть ли уже такой процесс, если нет системных служб не будет проверять информацию намерения startActivity, а затем участвовать в процессе создания, наконец , начал Acitivy что при холодном запуске. Проблемы при запуске появляется черный экран белым, производятся в течение этого времени. Система перед нанесением макета страницы загружается, первым инициализирует окно (окно), при выполнении этого шага, система определит его цвет по темам Темы темы , которую мы ставили, мы устанавливаем стиль определяет отображение в это черно-белое или черное.
      • windowIsTranslucent и windowNoTitle, эти два свойства значение истина (будет значительно Катон опыт, не рекомендуется)
      • Если начальная страница просто картинка, а затем создать определенную тему, чтобы начать новую страницу, установите тему андроид: windowBackground собственности на стартовую страницу предысторию
      • Использование слоя-список, чтобы сделать картинку launcher_layer.xml, установите его, чтобы начать фон страницы конкретную тему и установить ее в качестве макета фона стартовой страницы.

8, сильная ссылка устанавливается в нуль, оно не будет повторно?

  • Ссылка ответ:
    • Это не освобождает память , занятую объектом немедленно.  Если указанный объект установлен на нуль, просто разорвать текущий кадр стека потока , на который ссылается по отношению к объекту, и сборщик мусора нить работает в фоновом режиме, только тогда , когда пользовательские потоки бегут к безопасной точке (безопасное место) или безопасности область будет сканироваться опорным отношением объекта, сканируемый объект не ссылается объекты будут помечены, на этот раз до сих пор не немедленно освободить память объекта, поскольку некоторые объекты могут быть возмещены (ссылка в способе выделения финализации). Объекты могут не только определить время восстановления будет удалить ссылки на объекты в памяти.

9 разницы, ListView с RecyclerView

  • Ссылка ответ:
    • Анимационная разница:
      • В RecyclerView во многих анимации построил API, например: notifyItemChanged (), notifyDataInserted () , notifyItemMoved () и т.п., при необходимости пользовательских эффектов анимации может быть достигнуто путем реализации пользовательских эффектов анимации (RecyclerView.ItemAnimator класс), то вызов RecyclerView.setItemAnimator ();
      • Но ListView не достичь эффектов анимации, но мы можем быть анимированным элементом в самом адаптере;
    • Refresh разница:
      • ListView обычно обновить данные с глобальным обновлением notifyDataSetChanged (), это будет очень ресурсоемкий, в одиночку не может достичь частичного обновления , но если вы хотите достичь в ListView частичного обновлении , все еще может быть достигнута , когда элемент данных для обновления, мы можем метод Adapter, реализация метода onItemChanged () , чтобы добраться до положения пункта (по getFirstVisiblePosition ()) на внутренней стороне , а затем вызвать метод GetView () , чтобы обновить данные этого пункта;
      • частичное обновление RecyclerView может быть достигнут, например: notifyItemChanged ();
    • Разница кэша:
      • RecyclerView ListView, чем кэш множественного уровня, множество поддержки кэша ItemView, кэширование разработчика пользовательской логики, поддержка пользователей различных RecyclerView RecyclerViewPool (буферный пул).
      • ListView и RecyclerView механизмы кэширования в основном такие же, но использовать различные кэш

10, ListView является то, что адаптер адаптер

Ссылка ответ:

 

  • BaseAdapter : абстрактный класс, реальное развитие, мы будем наследовать этот класс и переопределить соответствующие методы, наиболее часто используемый один адаптер!
  • ArrayAdapter : Поддерживает общие операции, простой адаптер, может показать только строки текста -
  • SimpleAdapter : тот же адаптер , имеющий хорошую расширяемость, можно настроить различные эффекты!
  • SimpleCursorAdapter : используется для отображения простого типа текста ListView, там , как правило , будет использоваться в базе данных, но немного устарел, не рекомендуется!

11, LinearLayout, FrameLayout, сравнение производительности RelativeLayout, и почему?

  • Ссылка ответ:
    • RelativeLayout ребенок Посмотреть позвонит дважды onMeasure, LinearLayout, когда есть масса, которая также называется суб-View 2 onMeasure
    • RelativeLayout суб-View и RelativeLayout иначе, если высота повышается эффективность, когда ребенок View является сложным, эта проблема станет еще более серьезной. Если вы можете, попытайтесь использовать обивку вместо края.
    • В случае не влияет на уровень глубины, и использовать LinearLayout FrameLayout вместо RelativeLayout.

Алибаба Андорра вопросы лицо на протяжении многих лет, чтобы увидеть в блоге сет-топ;

https://blog.csdn.net/chuhe1989/article/details/104804567

 

Опубликовано 56 оригинальных статей · вона похвала 1 · просмотров 2900

рекомендация

отblog.csdn.net/chuhe1989/article/details/104848643