У меня был этот простой фрагмент кода:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//...
NetworkWorker networkFragment = NetworkWorker.createInstance(null);
fragmentTransaction.add(networkFragment, NETWORK);
//...
fragmentTransaction.commit();
networkFragment.startURLRequest("test");
}
, который вылетал, когда я звонил getActivity()
в моей startURLRequest()
процедуре.
Как только я переместил startURLRequest()
вызов onStart()
все работало нормально.
Итак, я немного погуглил и обнаружил следующее:
Вызов commit () не выполняет транзакцию немедленно.Скорее, он планирует запускать его в потоке пользовательского интерфейса («основном» потоке), как только этот поток сможет это сделать.Однако при необходимости вы можете вызвать executePendingTransactions () из вашего потока пользовательского интерфейса, чтобы немедленно выполнить транзакции, отправленные commit ().Это обычно не требуется, если транзакция не является зависимостью для заданий в других потоках.[ Руководство AndDev ]
Теперь мой вопрос ... действительно ли целесообразно использовать executePendingTransactions()
или это будет содержать некоторые ловушки?Есть ли другой способ определить, завершена ли транзакция?Просто предполагать, что они могут быть закончены в следующей рутине Действия, не кажется удовлетворительным.
С уважением, медуза