tgoop.com/dev_easy_notes/97
Last Update:
Вспомним что такое вообще транзакция. Само по себе понятие транзакции это некоторый набор действий который либо выполняется полностью, либо не выполняется. Это свойство назвается атомарность.
Фрагменты мы добавляем/удаляем/меняем через транзакции. В одной транзакции можем заменить текущий фрагмент и одновременно показать поверх него новый. Все эти действия произойдут одновременно. Как и полагается транзакции эта цепочка действий либо выполняется полностью, либо мы упадем. Это отличается от работы с Activity, где это было бы три отдельных действия.
Далее вы могли заметить что есть два метода чтобы закоммитить транзакцию: commit
и commitNow
. В чем разница? В том, что когда делаем commit, мы эту транзакцию отправляем в Looper главного потока, а когда делаем commitNow транзакция происходит вот прямо сейчас синхронно.
Чтобы это понять есть простая аналогия. Когда вызываем просто commit
, транзакция встает в очередь. Когда вызываем commitNow
эта транзакция превращается в чела который: "Мне просто спросить".
На практике крайне редко возникает потребность показать фрагмент без очереди через commitNow
. В большинстве случаев лучше просто не парится и показывать фрагменты через commit
. С commitNow
есть еще одно ограничение о котором поговорим в следующих постах.
Также есть такой метод как executePendingTransaction
, который просто выполняет все транзакции посланные в Looper
. Метод блокирующий, это значит, что при его вызове, все транзакции которые были посланы в Looper
и находятся в очереди, забьют на эту очередь и выполнятся сейчас. Отсюда выходит, что если вызвать сначала commit
, а потом следующей строкой executePendingTransaction
, то это аналогично простому вызову commitNow
.
BY Dev Easy Notes
Share with your friend now:
tgoop.com/dev_easy_notes/97