Подтвердить что ты не робот

В каких случаях я НЕ должен использовать FragmentManager executePendingTransactions() (в основном потоке)?

Я изучаю, как использовать фрагменты, и есть много маленьких ошибок, с которыми я сталкивался до сих пор. Метод executePendingTransactions FragmentManager выглядит так, как будто он может иметь несколько своих собственных, особенно из-за этой заметки в ее описании в официальных документах Android:

Если вы хотите немедленно выполнить любые такие ожидающие операции операции, вы можете вызвать эту функцию (только из основного потока), чтобы сделать это. Обратите внимание, что все обратные вызовы и другое связанное поведение будут выполняться из этого вызова, поэтому будьте осторожны, откуда это вызывается. http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()

Звучит для меня как довольно загадочное предупреждение. Как эти "обратные вызовы и другое связанное поведение" влияют на мое приложение? Может ли это вызвать проблемы при вызове этой функции из основного потока? Я не мог найти каких-либо конкретных примеров, поэтому я прошу помощи у любого, кто демистифицировал это предупреждение: какие примеры, когда я не должен использовать executePendingTransactions в основном потоке, и какие ужасные вещи произойдут, если я это сделаю? Или его всегда безопасно использовать до тех пор, пока он находится в основном потоке?

4b9b3361

Ответ 1

Вы не должны вызывать этот метод, когда находитесь в потоке, отличном от потока пользовательского интерфейса.

В указаны те же строки:

Если вы хотите немедленно выполнить любые такие ожидающие операции операции, вы можете вызвать эту функцию (только из основного потока), чтобы сделать это.

Ответ 2

вы не можете вызывать его из уже выполненной транзакции. вы получите "Рекурсивный вход для выполненияPendingTransactions"

для примера: вы заменяете фрагмент, а затем вызываете executePendingTranstactions. и в onCreate этого фрагмента вы заменяете другой фрагмент (с помощью действия fragmentManager)