У меня был этот простой фрагмент кода:
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(). В этом обычно нет необходимости, если транзакция не является зависимостью для заданий в других потоках. [И руководство для разработчиков]
Теперь мой вопрос... действительно ли целесообразно использовать этот executePendingTransactions()
или он содержит некоторые ловушки? Есть ли другой способ определить, завершена ли транзакция? Просто предположить, что они могут быть завершены в следующей процедуре Activity, не кажется удовлетворительным.
С уважением, медуза