我只是好奇是否必须在UI-Thread上调用它。根据文档,当将来有时间时,commit将在UI线程上运行。如果是这样,我可以在另一个线程上运行FragmentTransaction.commit()吗?
发布于 2012-05-08 01:05:59
不太明白你的意思。您可以始终使用任何其他线程向调用FragmentTransaction.commit()的UI线程发送消息。
但是,我不太理解为什么不在所有事务完成后立即调用commit。
我甚至认为,如果在延迟期间对片段或其依赖数据进行了任何更改,您甚至可能会遇到NullPointer错误,这会导致应用程序的状态与您立即调用提交时的状态不同。
同样在这种情况下,您应该调用fragmentManager.executePendingTransactions()来确保您的所有更改都将被执行,否则您可能会认为事务已经发生了--但实际上它们还没有发生。
发布于 2013-07-12 10:14:03
这个问题已经存在一年了,但我想要解决它,因为我怀疑这是一个很多人都会遇到的问题。
在非UI线程上使用FragmentTransactions,包括调用commit方法,是安全的,因为FragmentTransaction中发生的任何工作都不会直接操作UI。FragmentTransaction上的方法调用被简单地打包为要执行的工作的指令列表。
一旦调用了commit方法,该指令包就会被发送到UI线程进行处理。
https://stackoverflow.com/questions/10485764
复制相似问题