Разновидности commit()
#interview #intro
При использовании
По логике, должно быть достаточно только первого метода, но на практике их 4.
Для чего нужны все эти методы и чем они отличаются?
Это распространённый вопрос на собеседованиях, да и при повседневном кодинге подобная информация может быть важной. Давайте рассмотрим подробнее.
🔸
При вызове
🔸
При вызове
При вызове
В итоге получаем такую картину: если нужно выполнять транзакции синхронно и без добавления в back stack, то стоит использовать
Почитать подробнее про использование методов можно в этой статье.
#interview #intro
При использовании
Fragment
есть 4 способа совершить транзакцию: commit()
, commitAllowingStateLoss()
, commitNow()
, commitNowAllowingStateLoss()
. По логике, должно быть достаточно только первого метода, но на практике их 4.
Для чего нужны все эти методы и чем они отличаются?
Это распространённый вопрос на собеседованиях, да и при повседневном кодинге подобная информация может быть важной. Давайте рассмотрим подробнее.
🔸
commit()
vs commitAllowingStateLoss()
. Иногда при использовании Fragment
или DialogFragment
можно столкнуться с ошибкой can’t perform a commit after onSaveInstanceState(). Детальная статья об этой ошибке тут, а главный недостаток этого бага в том, что его не так просто отловить при разработке и он легко может проявиться в проде.commit()
и commitAllowingStateLoss()
почти одинаковы в своей работе за исключением одного: при вызове commit FragmentManager
проверяет, сохранил ли он своё состояние или нет. Если сохранил, то появляется эта ошибка. При вызове
commitAllowingStateLoss()
вы не получите ошибку, однако FragmentManager
может потерять своё состояние, и, соответственно, других фрагментов, добавленных после метода onSaveInstanceState()
.🔸
commit()
vs commitNow()
. Другая альтернатива использования commit влияет на время выполнения транзакции. При вызове
commit()
транзакция не совершается мгновенно: она планируется в главном потоке и выполняется только тогда, когда этот поток готов к выполнению. На практике это даёт возможность выполнять любое число транзакций, но следует помнить, что они не выполнятся сразу. При вызове
commitNow()
транзакция выполняется в тот же момент: если вызвать несколько транзакций, то все другие будут ожидать, пока первая не завершит своё выполнение. Стоит знать, что документация предостерегает не использовать этот метод, если вам нужно добавлять фрагмент в back stack.В итоге получаем такую картину: если нужно выполнять транзакции синхронно и без добавления в back stack, то стоит использовать
commitNow()
. Если же транзакций несколько и важно добавлять их в back stack, то commit()
. При возникновении ошибки стоит постараться выяснить причину её появления, и если победить её не удаётся, то лучше использовать методы с префиксом AllowingStateLoss.Почитать подробнее про использование методов можно в этой статье.
Про PendingIntent
#interview
Отсюда мы сразу выносим две ключевые разницы:
🔹событие связано с будущим действием;
🔹это действие происходит от имени вашего приложения.
Область применения
🔸FLAG_IMMUTABLE — означает, что
🔸FLAG_MUTABLE — означает, что компонент внутри
🔸FLAG_UPDATE_CURRENT — означает, что необходимо обновить содержимое компонента без создания нового
🔸FLAG_ONE_SHOT — позволяет
🔸FLAG_CANCEL_CURRENT — закрывает существующий
Почитать детальнее о том, как использовать этот компонент в Android 12 можно тут.
#interview
PendingIntent
— довольно важная часть приложений под Android, о которой мы часто забываем и не до конца понимаем, для чего она нужна. Так как с Android 12 у нас добавились изменения, связанные с работой с PendingIntent
, давайте посмотрим, что это за класс, ну и поговорим про изменения. PendingIntent
по сути — обёртка над обычным Intent
, которая позволяет другому приложению выполнить какое-то действие в будущем от имени вашего приложения. Отсюда мы сразу выносим две ключевые разницы:
🔹событие связано с будущим действием;
🔹это действие происходит от имени вашего приложения.
Область применения
PendingIntent
довольно обширна. Самые распространённые кейсы — это работа с AlarmManager
и уведомлениями. Тут можно найти ещё пару кейсов, например при взаимодействии с получением результата от другого приложения.PendingIntent
создаётся с флагами, которые влияют на его работу. 🔸FLAG_IMMUTABLE — означает, что
Intent
внутри PendingIntent
не может быть модифицирован другим приложением. Важно помнить, что приложение всегда может менять свои PendingIntent
, даже если они неизменяемы для других приложений. До Android 12 все PendingIntent
, созданные без этого флага были изменяемыми по умолчанию.🔸FLAG_MUTABLE — означает, что компонент внутри
PendingIntent
может быть модифицирован другим приложением при помощи PendingIntent.send()
. Флаг был добавлен в Android 12, и очень важно заполнять ComponentName
при такой модификации. 🔸FLAG_UPDATE_CURRENT — означает, что необходимо обновить содержимое компонента без создания нового
PendingIntent
. Если такого нет, то будет создан новый. 🔸FLAG_ONE_SHOT — позволяет
PendingIntent
выполнять действие только один раз. 🔸FLAG_CANCEL_CURRENT — закрывает существующий
PendingIntent
, что особенно важно, если вы хотите поменять приложение, на которое завязан ваш текущий PendingIntent
. Почитать детальнее о том, как использовать этот компонент в Android 12 можно тут.
System Design Interview
#interview
Отличная статья, которая будет интересна тем, кто подготавливается к собеседованиям в компании, где одним из шагов является — System Design Interview. По сути, вас просят описать, как разработать какой-то сервис (например приложение Twitter).
Решение не должно быть идеальным: никто не ожидает, что вы сможете сделать совершенную систему за полчаса. Важна коммуникация с интервьюером и те мысли, уточняющие вопросы, которые вы задаёте.
В статье отлично показан сам процесс собеседования как раз на примере приложения Twitter.
#interview
Отличная статья, которая будет интересна тем, кто подготавливается к собеседованиям в компании, где одним из шагов является — System Design Interview. По сути, вас просят описать, как разработать какой-то сервис (например приложение Twitter).
Решение не должно быть идеальным: никто не ожидает, что вы сможете сделать совершенную систему за полчаса. Важна коммуникация с интервьюером и те мысли, уточняющие вопросы, которые вы задаёте.
В статье отлично показан сам процесс собеседования как раз на примере приложения Twitter.
Жизнь в ОАЭ, Дубай
#экспаты #interview
Те, кто давно на канале, знают, что у нас есть рубрика, где гости, связанные с разработкой, рассказывают о своём опыте переезда и жизни в других странах. И хотя эта рубрика не самая популярная, но лично мне она очень нравится.🤓
Наш следующий гость — Антон Дудаков, который сейчас живёт в ОАЭ, Дубай, а работает в стартапе Ziina Android-разработчиком.
Как всегда, свои вопросы вы можете задать в форме, а дальше начнётся формирование уже готового интервью.
Кстати, пока ожидаете это интервью, вы можете почитать истории ребят из Израиля и Германии. 😎
#экспаты #interview
Те, кто давно на канале, знают, что у нас есть рубрика, где гости, связанные с разработкой, рассказывают о своём опыте переезда и жизни в других странах. И хотя эта рубрика не самая популярная, но лично мне она очень нравится.🤓
Наш следующий гость — Антон Дудаков, который сейчас живёт в ОАЭ, Дубай, а работает в стартапе Ziina Android-разработчиком.
Как всегда, свои вопросы вы можете задать в форме, а дальше начнётся формирование уже готового интервью.
Кстати, пока ожидаете это интервью, вы можете почитать истории ребят из Израиля и Германии. 😎