В каких случаях я НЕ должен использовать FragmentManager executePendingTransactions() (в основном потоке)?
Я изучаю, как использовать фрагменты, и есть много маленьких ошибок, с которыми я сталкивался до сих пор. Метод executePendingTransactions
FragmentManager выглядит так, как будто он может иметь несколько своих собственных, особенно из-за этой заметки в ее описании в официальных документах Android:
Если вы хотите немедленно выполнить любые такие ожидающие операции операции, вы можете вызвать эту функцию (только из основного потока), чтобы сделать это. Обратите внимание, что все обратные вызовы и другое связанное поведение будут выполняться из этого вызова, поэтому будьте осторожны, откуда это вызывается. http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()
Звучит для меня как довольно загадочное предупреждение. Как эти "обратные вызовы и другое связанное поведение" влияют на мое приложение? Может ли это вызвать проблемы при вызове этой функции из основного потока? Я не мог найти каких-либо конкретных примеров, поэтому я прошу помощи у любого, кто демистифицировал это предупреждение: какие примеры, когда я не должен использовать executePendingTransactions
в основном потоке, и какие ужасные вещи произойдут, если я это сделаю? Или его всегда безопасно использовать до тех пор, пока он находится в основном потоке?
Ответы
Ответ 1
Вы не должны вызывать этот метод, когда находитесь в потоке, отличном от потока пользовательского интерфейса.
В указаны те же строки:
Если вы хотите немедленно выполнить любые такие ожидающие операции операции, вы можете вызвать эту функцию (только из основного потока), чтобы сделать это.
Ответ 2
вы не можете вызывать его из уже выполненной транзакции.
вы получите "Рекурсивный вход для выполненияPendingTransactions"
для примера:
вы заменяете фрагмент, а затем вызываете executePendingTranstactions.
и в onCreate этого фрагмента вы заменяете другой фрагмент (с помощью действия fragmentManager)