Android的FragmentTransaction.commit()方法线程安全吗?

时间:2012-05-07 16:37:32

标签: android android-fragments

我只是想知道我是否必须在UI-Thread上调用它。根据文档,commit将来会在UI线程上运行,当有时间时。如果是这种情况,我可以在另一个线程上运行FragmentTransaction.commit()吗?

2 个答案:

答案 0 :(得分:13)

这个问题已经有一年了,但我想解决它,因为我怀疑这是很多人会遇到的问题。

使用FragmentTransactions,包括调用commit方法,在非UI线程上是安全的,因为FragmentTransaction中发生的任何工作都不会直接操作UI。对FragmentTransaction的方法调用只是打包为要执行的工作指令列表。

一旦调用了commit方法,该指令包就会被发送到UI线程进行处理。

答案 1 :(得分:3)

不完全确定你的意思。您可能总是有任何其他线程向UI线程发送消息,调用FragmentTransaction.commit()。

但是,我不太明白为什么你不在所有交易后立即调用提交。

我甚至希望你甚至可以体验NullPointer错误,如果片段或它们的依赖数据有任何改变 - 在延迟期间 - 我的意思是 - 这会导致你的应用程序的状态与你立即调用commit时的状态不同。

同样在这种情况下,您应该致电fragmentManager.executePendingTransactions()以确保您所做的所有更改,否则您可能会认为交易已经发生 - 事实上他们还没有进行。