Blog about Android
-
ContentProvider, что такое и зачем нужен?
ContentProvider — это компонент Android, предназначенный для: Если App A хочет получить данные из App B, но App A не знает реализацию App B. Оно просто работает с Uri и Cursor. ContentProvider действует как контрактный интерфейс между ними. Как унифицированный интерфейс доступа к данным работа с: всё работает одинаково через ContentResolver
-
В каких случаях onLayout() вызывается два раза?
onLayout() дважды (или больше раз) может вызываться в рамках одного layout pass-а — и это может как быть нормальным, так и сигналом об ошибке. onLayout() вызывается два и более раз, если:
-
Методы жизненного цикла View, какие есть, зачем нужны?
1. constructor() / init Что делает: создаёт View, инициализирует поляВызывается: при создании View — через XML или программно Аналогия: ты строишь мебель по инструкции — ещё ничего не стоит, но детали есть. 2. onAttachedToWindow() Что делает: сообщает, что View добавлена в иерархию окнаВызывается: после того, как View прикреплена к окну Аналогия: ты поставил мебель в…
-
onDestroy() когда будет вызван? onRestart() когда будет вызван?
onDestroy(): когда вызывается? onDestroy() вызывается, когда Activity окончательно уничтожается — то есть больше не будет возвращена пользователю. Вызывается в трёх основных случаях: При этом: onRestart(): когда вызывается? onRestart() вызывается, когда Activity возвращается из состояния Stopped в Started. То есть: Когда не вызывается onRestart():
-
Смена конфигурации. Как и где обрабатывать? Куда сохраняется этот стейт в системе?
Что такое «смена конфигурации»? Как происходит пересоздание?Это любое изменение, требующее пересоздания Activity или Fragment, например: По умолчанию Android убивает и пересоздаёт Activity, чтобы применить новую конфигурацию. Как происходит пересоздание? Куда сохраняется Bundle? ‼️ Bundle должен содержать только примитивы, Parcelable, Serializable — иначе он НЕ будет сериализован корректно и Activity не восстановится.
-
Зачем нужен saveInstanceState(), как и где используется? После чего и до чего вызывается onSaveInstanceState?
Нужен savedInstanceState, чтобы временно сохранить UI-состояние, которое: Аналогия Представь, что ты играешь в шахматы на доске. Вдруг кто-то стучит в дверь, и ты убираешь доску, но фотографируешь позицию фигур. Потом возвращаешься, ставишь доску — и восстанавливаешь фигуры по фото. onSaveInstanceState() — это как сфоткать текущую позицию.savedInstanceState — это снимок доски.onCreate() или onViewStateRestored() — момент, когда…
-
В каких случаях View уничтожается, а Fragment живет? Зачем это может быть нужно?
Это происходит, когда: ▶️ Fragment переходит в состояние onDestroyView(), но не в onDestroy() Пример:При навигации внутри ViewPager (до ViewPager2) или при использовании фрагментов с FragmentTransaction().replace() / addToBackStack(), когда пользователь покидает экран, но Fragment остаётся в памяти, потому что: Android освобождает ресурсы UI (View), но сохраняет сам Fragment, чтобы быстрее восстановить UI при возврате назад. Инстанс…
-
Что такое атомарные операции? Какие механизмы их реализации можешь перечислить? Атомарны ли операции присваивания?
Атомарные операции: Атомарные операции — это операции, которые выполняются полностью или не выполняются вовсе, не допуская частичной модификации данных между потоками. Механизмы реализации: Атомарны ли операции присваивания? Операции присваивания примитивов (кроме long и double) атомарны, но не для сложных объектов.
-
Как из HashMap-а сделать потокобезопасный HashMap?
Чтобы сделать потокобезопасный HashMap, можно использовать следующие подходы: ConcurrentHashMap обычно предпочтительнее, так как предоставляет лучшую производительность в многопоточной среде.
-
Что делает synchronized?
synchronized — это ключевое слово в Java, которое используется для управления доступом к критическим секциям кода между несколькими потоками. Когда метод или блок кода помечен как synchronized, только один поток может получить доступ к этому коду в одно и то же время. Основные функции synchronized:
-
Как сделать так, чтобы поток не кэшировал данные? Что делает volatile?
Чтобы поток не кэшировал данные в Java, нужно использовать ключевое слово volatile для переменной. Это гарантирует, что каждый раз при обращении к переменной поток будет читать её актуальное значение из основной памяти, а не из кэша потока. Что делает volatile:
-
Как потоки в себе хранят данные, как к себе обращаются?
Как потоки хранят данные: Как потоки обращаются к данным: