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

z8dt9xmd  于 11个月前  发布在  Android
关注(0)|答案(3)|浏览(155)

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

aurhwmvo

aurhwmvo1#

这个问题已经有一年了,但我想解决它,因为我怀疑这是一个很多人都会遇到的问题。
使用FragmentTransaction,包括调用commit方法,* 在非UI线程 * 上进行是安全的,因为FragmentTransaction中发生的任何工作都不会直接操作UI。FragmentTransaction上的方法调用只是打包为要执行的工作指令列表。
一旦调用了commit方法,该指令包就会被发送到UI线程进行处理。

ntjbwcob

ntjbwcob2#

不太清楚你的意思。你可能总是有任何其他线程发送消息给调用FragmentTransaction.commit()的UI线程。
但是,我不太理解为什么在所有事务之后不立即调用commit。
我甚至希望你甚至可能会遇到NullPointer错误,如果有任何改变的片段或其依赖的数据-在延迟期间,我的意思是-这会导致你的应用程序的不同状态,而不是当你立即调用提交。
同样在这种情况下,你应该调用fragmentManager.executePendingTransactions()来确保你的所有更改都将被执行,否则你可能会认为事务已经发生了--事实上它们还没有发生。

8oomwypt

8oomwypt3#

以防有人像我一样需要2023年最新的答案,它是线程安全的
正如官方文件所说:
提交不会立即发生;它将被调度为主线程上的工作,以便在下一次线程准备就绪时完成。
我在自己的代码中尝试在非UI线程中提交一个片段事务,它工作得很好,没有崩溃。

相关问题