Вы когда-нибудь задумывались над тем, какие вопросы могут вас ожидать на собеседовании при устройстве на позицию Android-разработчика? Если да, то канал "Android Interview Review" (@androidsobes) - именно то, что вам нужно! Здесь собраны популярные вопросы и подробные ответы с собеседований на Android-разработку. Этот ресурс станет вашим надежным помощником в подготовке к собеседованиям и поможет вам успешно пройти интервью.
Кроме того, если вы Java-разработчик, вам обязательно стоит заглянуть на канал @JavaSobes, где также можно найти ценные материалы для собеседований.
Если у вас возникли вопросы или вы хотели бы узнать больше информации, вы всегда можете связаться с администратором канала по ссылке @SobesAdmin.
Не упустите возможность подготовиться к собеседованиям на Android-разработчика на высоком уровне - подписывайтесь на канал "Android Interview Review" прямо сейчас! Подробнее также доступно на https://itsobes.ru
22 Jan, 08:14
13 Jan, 10:52
15 Sep, 14:00
commit()
или вызвать executePendingTransactions() после метода commit()
.13 Sep, 14:00
Tag
в методе add() присваивается фрагменту. Fragment.getTag() возвращает этот тег.tag
, а name
. Имя транзакции, которое присваивается объекту BackStackEntry и возвращается методом getName().val tag = "home_fragment"
supportFragmentManager.beginTransaction()
.add(R.id.fragmentContainer, HomeFragment, tag)
.addToBackStack(tag)
.commit();
…
val lastEntryIndex = supportFragmentManager.backStackEntryCount - 1
val tag = supportFragmentManager.getBackStackEntryAt(lastEntryIndex).name
val topFragment = supportFragmentManager.findFragmentByTag(tag)
07 Sep, 14:00
view
.supportFragmentManager.beginTransaction()
.add(R.id.fragmentContainer, Fragment1())
.addToBackStack("add1")
.add(R.id.fragmentContainer, Fragment2())
.addToBackStack("add2")
.commit()
add2
, которая добавляет сразу два фрагмента. При нажатии кнопки Back оба фрагмента будут удалены.addToBackStack()
не задокументировано и может различаться на разных версиях ОС, так что не забудьте на собеседовании сказать, что вы бы так никогда делать не стали.06 Sep, 14:00
FragmentManager
используются метод активити getSupportFragmentManager()) или метод фрагмента getChildFragmentManager()).FragmentManager
начинает транзакцию и возвращает объект FragmentTransaction
вызовом метода beginTransaction().FragmentTransaction
, которые необходимо знать - add()
, remove()
и replace()
.containerViewId
, в который добавляется фрагмент, инстанс фрагмента, тег.<fragment>
.add()
. Удаляет фрагмент.add()
в заданный контейнер, и добавляет переданный аргументом фрагмент в контейнер. Параметр tag
может быть null.addToBackStack()
применяется ко всем операциям в транзакции. Например следующий код добавляет транзакцию из трех операций в бэкстэк:fragmentTransaction
.add(R.id.fragmentContainer1, fragment1)
.add(R.id.fragmentContainer2, fragment2)
.replace(R.id.fragmentContainer1, fragment3)
.addToBackStack("tag")
.commit()
true
, если бэкстэк хранил хотя бы одну транзакцию.02 Sep, 14:02
01 Sep, 07:02
29 Aug, 14:02
onPause()
, onStop()
, onSaveInstanceState()
, onDestroy()
– onCreate()
, onStart()
, onRestoreInstanceState()
, onResume()
.Bundle
с сохраненным состоянием передается в onCreate()
и в onRestoreInstanceState().onSaveInstanceState()
и onRestoreInstanceState()
только в том случае, когда необходимо сохранить состояние, например при повороте экрана или при убийстве активити для освобождения памяти. Данные коллбэки не вызываются, если пользователь выходит из активити нажав Back или если активити убивается вызовом finish()
.onStop()
на версии API ≥ 28. На API < 28 этот коллбэк вызывается перед onStop()
и нет гарантий до или после onPause()
.onStart()
.26 Aug, 14:06
onCreate()
, onStart()
, onResume()
, onPause()
, onStop()
, onDestroy()
.onCreate()
вы должны вызвать метод setContentView().onResume()
. Пользователь больше не может взаимодействовать с активити, но активити частично видна пользователю. В этом состоянии UI активити может изменяться.onStart()
. Вызывается, когда активити больше не видна пользователю.onCreate()
. Вызывается перед тем, как активити будет уничтожена системой.onPause()
, onStop()
. Пользователь открывает приложение снова - onStart()
, onResume()
.startActivity()
) – onPause()
, onStop()
. Пользователь возвращается на предыдущую активити – onStart()
, onResume()
.finish()
– onPause()
, onStop()
, onDestroy()
. Когда пользователь перейдет на эту активити снова, она будет создана с нуля без сохранения состояния.onPause()
, onStop()
, onDestroy()
, onCreate()
, onStart()
, onResume()
с сохранением состояния.onRestart()
, onSaveInstanceState()
, onRestoreInstanceState()
, onNewIntent()
и другие методы, которые разберем в будущем.24 Aug, 14:02
22 Aug, 14:01
Activity
, у которой вызван onResume()
, но еще не вызван onPause()
BroadcastReceiver.onReceive()
Service
и выполняется один из колбэков: onCreate()
, onStart()
, onDestroy()
Activity
у которой вызван onPause()
, но еще не вызван onStop()
.Service
, который запущен через Service.startForeground(). В этом случае пользователь видит нотификацию, связанную с сервисом.Service
, выполняющий функцию, о которой пользователь осведомлен. Например input method service.onStop()
состоянии.19 Aug, 14:02
<activity>
, <service>
, <receiver>
, <provider>
может иметь поле android:process="<name>"
в андроид манифесте. Кастомное значение этого поля явно говорит системе в каком процессе будет работать компонент.Application.onCreate()
. Если в этом методе вы инициализируете модули или библиотеки, которые используются только в главном процессе, то не забывайте проверять, в каком процессе вы находитесь в момент инициализации.17 Aug, 14:01
09 Dec, 09:30
FLAG_ACTIVITY_CLEAR_TASK
используется для того, чтобы очистить все активити таска. Activity, запущенная таким интентом становится новым корнем пустого бэкстека. Этот флаг обязан быть использованным вместе с FLAG_ACTIVITY_NEW_TASK
.FLAG_ACTIVITY_CLEAR_TOP
. Разница в том, что если этот флаг задан, а в таск листе существует старый экземпляр данной активити, все другие активити будут удалены, а корнем станет тот старый экземпляр. Использовать при этом FLAG_ACTIVITY_NEW_TASK
не обязательно, но рекомендуется.06 Dec, 13:00
Intent
передается в метод startActivity()
явно, либо разрешается с помощью механизма Intent Resolution.Intent
в startService()
.sendBroadcast()
, sendOrderedBroadcast()
, или sendStickyBroadcast()
.03 Dec, 15:30
AndroidManifest.xml
– определение компонентов и требуемых возможностей девайса для приложения.build.gradle
– файлы конфигурации сборки для всего приложения и отдельных модулей.src
– исходный код классов и ресурсы проекта..R
– сгенерированный на этапе компиляции перечень всех ресурсов проекта.assets
– файлы, которые должны попасть в .apk как есть, без изменений.res/drawable
– директория для картинок (drawable-объектов).res/layout
– директория для файлов которые определяют UI приложения.res/values
– директория для различных XML-файлов с простыми ресурсами, такими как строки, цвета и числа. res/mipmap
– иконки для launcher-а разных разрешений.res/menu
– XML с определениями разных меню.res/font
– шрифты.res/xml
– XML файлы, доступные через Resources.getXML()
.res/raw
– различные файлы, доступные в виде потоков данных через Resources.openRawResource()
.res/anim, res/animator
– анимации.01 Dec, 15:00
23 Nov, 09:01
Fragment.setArgument(Bundle)
. Переданный бандл может быть получен через Fragment.getArguments()
в соответствующем методе жизненного цикла фрагмента.setArguments
/getArguments
гарантирует, что при пересоздании Bundle будет сериализован/десериализован, и данные восстановятся.18 Nov, 15:01
Context.SENSOR_SERVICE
;16 Nov, 15:00
adb
из SDK. Более сложные клиенты могут использовать adb
внутри, либо самостоятельно подключаться к порту ADB сервера.