ANDROID_LIVE Telegram 555
​​Разновидности commit()
#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.

Почитать подробнее про использование методов можно в этой статье.



tgoop.com/android_live/555
Create:
Last Update:

​​Разновидности commit()
#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.

Почитать подробнее про использование методов можно в этой статье.

BY Android Live 🤖




Share with your friend now:
tgoop.com/android_live/555

View MORE
Open in Telegram


Telegram News

Date: |

Telegram channels enable users to broadcast messages to multiple users simultaneously. Like on social media, users need to subscribe to your channel to get access to your content published by one or more administrators. Today, we will address Telegram channels and how to use them for maximum benefit. Click “Save” ; Other crimes that the SUCK Channel incited under Ng’s watch included using corrosive chemicals to make explosives and causing grievous bodily harm with intent. The court also found Ng responsible for calling on people to assist protesters who clashed violently with police at several universities in November 2019. 6How to manage your Telegram channel?
from us


Telegram Android Live 🤖
FROM American