├── README.html
└── README.md
/README.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
63 | -
64 |
Жизненный цикл Activity
65 |
66 | OnCreate() Создаётся view.
67 | OnStart() Активити становится видно
68 | OnResume() Активити становится доступным для ввода пользователя
69 | OnPause() Активити видно, но недоступо для ввода пользователя (важно для многооконного режима)
70 | OnStop() Активити больше не видно
71 | OnDestroy() Активити уничтожается
72 | OnRestart() Активити пересоздаётся, вызывается после уничтожения и перед созданием
73 |
74 |
75 | -
76 |
Когда onDestroy() вызывается без onPause() и onStop()?
77 |
78 | - Если активити закрывается через метод
finish() до начала onStart и onResume.
79 |
80 |
81 | -
82 |
Почему setContentView() располагают в onCreate()
83 |
84 | - Это тяжёлая операция, и выгоднее производить её только единожды, при создании активити.
85 |
86 |
87 | -
88 |
Launch modes
89 |
90 | - Standard При вызове, активити создаётся заново.
91 | - SingleTop Активити создаётся заново, только если она не вверху активити-стека.
92 | - SingleTask Стек стирается до момента, пока эта активити не окажется наверху стека.
93 | - SingleInstance Похож на SingleTask, но при создании активити, она уйдёт в новый таск.
94 |
95 |
96 | -
97 |
Как очистить бэкстек при создании активити
98 |
99 | - Использовать флаг
FLAG_ACTIVITY_CLEAR_TOP.
100 | - Использовать
FLAG_ACTIVITY_CLEAR_TASK и FLAG_ACTIVITY_NEW_TASK вместе.
101 |
102 |
103 | -
104 |
Разница между FLAG_ACTIVITY_CLEAR_TASK и FLAG_ACTIVITY_CLEAR_TOP
105 |
106 | - Первый очистит всё, что есть в таске, второй — только до той же активити, что и запускаемая.
107 |
108 |
109 | -
110 |
Жизненный цикл Fragment
111 |
112 | 
113 |
114 |
115 | -
116 |
Описать Content Provider
117 |
118 | - Позволяет передавать данные между приложениями и процессами. Используется в связке с
ContentResolver.
119 |
120 |
121 | -
122 |
Описать Service/IntentService
123 |
124 | - Часть приложения без UI
125 | - Foreground Выполняется в основном потоке. Во время исполнения показывает уведомление. Пример — аудиоплеер.
126 | - Background Выполняется в фоновом потоке. Начиная с API 26, приложения в фоне не могут создавать фоновые сервисы, решением в этом случае может быть
WorkManager.
127 | - Bound Клиент-серверный подход: посылаем запросы, получаем результаты.
128 | - IntentService Создаёт и работает в собственном потоке.
129 |
130 |
131 | -
132 |
Описать Handler
133 |
134 | - Handler - это механизм, который позволяет работать с очередью сообщений между потоками. Он привязан к конкретному потоку и работает с его очередью. Handler умеет помещать сообщения в очередь. При этом он ставит самого себя в качестве получателя этого сообщения. И когда приходит время, система достает сообщение из очереди и отправляет его адресату (т.е. в Handler) на обработку.
135 |
136 |
137 | -
138 |
Разница между Serializable и Parcelable
139 |
140 | - В первом используется рефлексия, довольно медленный процесс, однако разработчику нужно писать меньше кода. В Parcelable мы описываем только те вещи, которые нужно сериализовать, из-за чего кода становится больше.
141 |
142 |
143 | -
144 |
Как обновить UI-поток из фонового сервиса
145 |
146 | - Использовать Local Broadcast.
147 |
148 |
149 | -
150 |
Виды Intent-ов
151 |
152 | - Implicit Вызываете системный интент: отправить СМС, позвонить, открыть карты и так далее
153 | - Explicit Вызов других активити внутри приложения
154 | - Sticky Интент, который остаётся после завершения бродкаста. Например, при подписке на
ACTION_BATTERY_CHANGED, мы получим последний посланный интент. Поэтому, если нам нужно только текущее состояние батареи, слушать дальнейшие бродкасты не обязательно.
155 | - Pending Интент, который может быть исполнен в будущем на правах вашего приложения
156 |
157 |
158 | -
159 |
Из-за чего возникает ошибка Application Not Responding (ANR)
160 |
161 | - Когда UI не отвечает 5 секунд. Случается обычно из-за блокированного главного треда.
162 |
163 |
164 | -
165 |
BroadcastReceiver в Android 8
166 |
167 | - Apps that target Android 8.0 or higher can no longer register broadcast receivers for implicit broadcasts in their manifest. An implicit broadcast is a broadcast that does not target that app specifically. For example, ACTION_PACKAGE_REPLACED is an implicit broadcast, since it is sent to all registered listeners, letting them know that some package on the device was replaced. However, ACTION_MY_PACKAGE_REPLACED is not an implicit broadcast, since it is sent only to the app whose package was replaced, no matter how many other apps have registered listeners for that broadcast.
168 | - Apps can continue to register for explicit broadcasts in their manifests.
169 | - Apps can use Context.registerReceiver() at runtime to register a receiver for any broadcast, whether implicit or explicit.
170 | - Broadcasts that require a signature permission are exempted from this restriction, since these broadcasts are only sent to apps that are signed with the same certificate, not to all the apps on the device.
171 |
172 |
173 | -
174 |
Может ли приложение работать в разных процессах? Зачем это нужно? Как можно организовать межпроцессорное взаимодействие?
175 |
176 | - Может. Для частей приложения (активити, сервисы, бродкасты и контент провайдеры) надо указать флаг process.
177 | - +: Получаем больше памяти. Не всё приложение при недостатке памяти будет убито.
178 | - -: Поскольку каждый процесс живёт в отдельном инстансе Дальвика, делиться информацией сложно. Для этого используются AIDL, интенты, handler-ы, messenger-ы
179 |
180 |
181 | -
182 |
onTouchEvent()
183 |
186 |
187 |
188 |