2

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

4

2 回答 2

14

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

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

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

于 2013-07-12T02:14:03.390 回答
3

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

但是,我不太明白为什么您在所有事务之后不立即调用 commit。

我什至希望您甚至可能会遇到 NullPointer 错误,如果片段或其相关数据发生任何更改 - 我的意思是在延迟期间 - 这会导致您的应用程序的状态与您立即调用 commit 时不同。

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

于 2012-05-07T17:05:59.447 回答