· 6 years ago · Jan 14, 2020, 05:16 PM
1# Android Interview Questions
2
3### Жизненный цикл
4 * Activity
5 * <img src="https://github.com/nowiwr01/Interview/blob/master/materials/activity_lifecycle.png" width="350px" />
6 * Fragment
7 * <img src="https://github.com/nowiwr01/Interview/blob/master/materials/fragments_lifecycle.jpg" width="250px" />
8 * Service
9 * <img src="https://github.com/nowiwr01/Interview/blob/master/materials/service_lifecycle.jpg" width="300px" />
10
11### Activity
12 * Как сохранять состояние Activity при повороте экрана?
13 * Чтобы сохранить состояние активити, нужно переопределить метод onSaveInstanceState() и положить данные в Bundle. При реинициализации активити, Bundle с сохраненным состоянием передается в onCreate() и в onRestoreInstanceState(). Система вызывает onSaveInstanceState() и onRestoreInstanceState() только в том случае, когда необходимо сохранить состояние, например при повороте экрана или при убийстве активити для освобождения памяти. Данные коллбэки **не** вызываются, если пользователь выходит из активити нажав Back или если активити убивается вызовом finish().
14 * Когда вызывается onSavedInstanceState() и onRestoreInstanceState()?
15 * onSaveInstanceState() вызывается после onStop() на версии API ≥ 28. На API < 28 этот коллбэк вызывается перед onStop() и нет гарантий до или после onPause(). А onRestoreInstanceState() вызывается после onStart()
16 * Может ли Android убить Activity, которая находится на переднем плане? Если да, то в каких случаях?
17 * Может, если Activity, находящаяся на переднем плане, потребляет слишком много памяти. Когда с помощью этой Activity достигнуто состояние подкачки памяти, она уничтожается, чтобы UI сохранял свою отзывчивость.
18
19### Fragment
20 * Что такое Fragment и где он может использоваться?
21 * Можно ли создать Fragment без UI? Если да, то в каких случаях это можно использовать?
22 * Что такое FragmentManager?
23 * Что такое FragmentTransaction?
24 * Как восстановить состояние Fragment?
25 * Какие методы вызываются только 1 раз за жизненный цикл?
26 * onAttach(), onCreate(), onDestroy(), onDetach()
27 * Чем отличаются Fragment и Activity? Объяснить их взаимоотношения.
28 * Обычно Activity - отдельный целенаправленный модуль с чётким предназначением (набор номера, просмотр карты, сделать снимок или отправить электронное письмо). Хотя, разработчику ничего не мешает сделать более сложный интерфейс, который содержит в себе несколько сложных модулей. Обычно такие модули принято разделять на Fragments, которые имеют свой жизненный цикл, а так же могут быть добавлены или удалены по желанию. Важно помнить, что жизненный цикл Fragment напрямую зависит от жизненного цикла его Activity. То есть, когда действие приостановлено, то все фрагменты в нем также приостановлены, и когда Activity разрушена, все его фрагменты тоже.
29 * Почему рекомендуется использовать только стандартный конструктор при создании Fragment?
30 * Как взаимодействовать между двумя фрагментами без участия Activity??
31
32### Service & AsyncTask
33 * Что такое Service?
34 * Service - компонент Android приложения, который может выполнять длительные операции в фоновом режиме и не содержит UI. Другой компонент приложения может запустить Service, который продолжит работу в фоновом режиме даже в том случае, когда пользователь перейдет в другое приложение.
35 * Это не значит, что работает в другом потоке.
36 * И это не значит, что вы сможете бесконечно долго что-то делать в фоне. Система убьёт вас, если вы будете злоупотреблять этим.
37 * В каких случаях использование Services полезно?
38 * Чем отличаются Intent Service от Service?
39 * `Service` - базовый класс для всех сервисов, расширив который, можно создать любой сервис. Класс, который расширяет сервис, будет выполняться в Main Thread, поэтому, будет блокировать UI, если таковой имеется. Поэтому, нужно либо создавать отдельный поток в Service, либо использовать его для не слишком долгих операций.
40 * `IntentService` - Подкласс Service. Он Используется, если в сервисе нужно выполнять какие-то тяжелые задачи, и мы не хотим сами возиться с асинхронностью. Принцип работы этого вида сервиса прост. Он создает новый поток для своей работы. Затем берет все Intent пришедшие ему в onStartCommand и отправляет их на обработку в этот поток. Как именно обрабатываются Intent – зависит от нас, т.к. мы сами кодим это в методе onHandleIntent.
41 * Какие типы Services бывают?
42 * `Backgound-Services` запущенны с помощью `context.startService(Intent)`. Они живут до тех пор, пока не вызвали stopSelf() или пока система не убила их.
43 * `Foregraund-Services` - аналогично `Background`, но внутри себя вызвали `startForeground()` и показали уведомление в верхней панели. Системе нравится такой подход больше, потому что мы ничего не скрываем от пользователя.
44 * `Bound-Services` - тоже запускаются через `context.startService(Intent)` и будут жить, пока есть привязанные клиенты (контролировать это можем `bindService()/unbindService()`). Используется для одно/двустороннего взаимодействия.
45 * Какие режимы бывают у Services?
46 * `onStartCommand()` возвращает режим, в котором будет запущен сервис.
47 * `START_NO_STICKY` - если система убила сервис, то не перезапустит его.
48 * `START_STICKY` - если система убила сервис, то перезапустит с intent=null.
49 * `START_REDELIVER_INTENT` - так же, как и `START_STICKY`, но восстановит intent.
50 * Как остановить Service?
51 * Ответ зависит от того, с каким типом Service мы имеем дело. Если это Background/Foregraund - нужно вызывать stopSelf() или ждать.
52 * Когда останавливается Bound-Service?
53 * Какой метод отличает его, чтобы служба работала в фоновом режиме?
54 * Какие проблемы могут возникнуть при использовании Services?
55 * С каждой версией Android всё больше заботится о батарейке, поэтому нещадно убивает приложения, а иногда не позволяет даже просто так запустить Background-Service. А ещё может убить (и убьёт) их раньше, чем мы закончим всё, что хотели, если приложение не активно и у него нет запущенных экранов. Поэтому, чтобы не возникало проблем, нужно уведомляять пользователя о долгих фоновых операциях с помощью `startForeground().`
56 * Что такое AsyncTask?
57 * Когда нужно использовать Service, а когда AsyncTask?
58 * Какие есть проблемы у Activity и AsyncTask? Как их избежать или решить?
59
60### Intent
61 * Что такое Intent?
62 * Что такое Action?
63 * Что такое Intent Filter?
64 * Что такое StikyIntent?
65 * Что такое PendingIntent?
66 * Объясните основные 3 случая, когда используется Intent.
67 * Отличия Explicit Intent и Implicit Intent.
68
69### Общие
70 * Как происходит отрисовка любого (почти) View в Android?
71 * Расскажите структуру Manifest.xml
72 * Назовите основные компоненты Android приложения.
73 * Что такое Context?
74 * Что такое BroadcastReciever?
75 * Что такое LocalBroadcastManager?
76 * Что такое ContentProvider?
77 * Какая разница между обычным растровым изображением и 9-patch изображениями?
78 * Что за ошибка Application Not Respondin и как избежать её появления в приложении?
79 * Разница между Serializable и Parcelable? Что лучше подходит для Android?
80 * Что такое Views и ViewGroups и чем они отличаются?
81 * Как создать приложение, которое поддерживает все размеры экрана?
82 * Что такое утечки памяти? Приведите пример, когда это может произойти.
83 * Назовите плюсы и минусы хранения данных в SharedPreferences.
84
85### Архитектура
86 * MVC
87 * MVP
88 * MVVM
89 * MVI
90 * Какие приемущества у MVVM над MVP?
91
92### Retrofit2
93 * В чём плюсы использования Retrofit вместо AsyncTask?
94 * Как обрабатывать несколько сетевых вызовов с помощью Retrofit?
95
96### RxJava2
97 * В чём смысл и какие плюсы у реактивного программирования?
98 * Основные принципы Observable и Observer
99 * Какие типы Observables существуют?
100 * Разница между Observable и Flowable
101 * Что такое Backpressure и какие бывают стратегии работы с ним?
102 * Что такое Single?
103 * Что такое Completable?
104 * Что такое Maybe?
105 * В каких случаях используются Single, Completable и Maybe?
106 * from, just — для чего и в чем отличия?
107 * map, flatMap, concatMap, switchMap — для чего и в чем отличия?
108 * Что делают observeOn() и subscribeOn()?
109 * Что будет, если вызвать несколько subscribeOn()? А если несколько observeOn()?
110 * Разница между Hot Observable и Cold Observable?
111
112### Room & SQL
113 * Что такое PrimaryKey?
114 * Что такое Foreign Key?
115 * Как избавиться от проблемы вложенных классов?
116 * Как из таблицы Markers достать уникальные элементы?
117 * Что такое Pattern Matching в SQL?