UIスレッドでこれを呼び出す必要があるかどうかだけが気になります。ドキュメントによると、commit
はUIスレッドで実行され、将来的には実行する時間があります。この場合、FragmentTransaction.commit()
別のスレッドで実行できますか?
2 に答える
この質問は1年前のものですが、多くの人が遭遇する問題だと思うので、私はそれに対処したいと思いました。
コミットメソッドの呼び出しを含むFragmentTransactionsの操作は、FragmentTransaction内で発生する作業がUIを直接操作しないため、UI以外のスレッドで安全に実行できます。FragmentTransactionのメソッド呼び出しは、実行する作業の指示のリストとして単純にパッケージ化されています。
commitメソッドを呼び出すと、その命令のパッケージがUIスレッドに送信されて処理されます。
あなたが何を意味するのか正確にはわかりません。FragmentTransaction.commit()を呼び出すUIスレッドにメッセージを送信する他のスレッドが常に存在する可能性があります。
ただし、すべてのトランザクションの直後にcommitを呼び出さない理由はよくわかりません。
フラグメントまたはそれに依存するデータに変更があった場合(つまり、遅延中に)NullPointerエラーが発生する可能性もあります。これにより、すぐにcommitを呼び出す場合とは異なるアプリの状態が発生します。
また、そのコンテキストではfragmentManager.executePendingTransactions()
、すべての変更が行われることを確認するために呼び出す必要があります。そうしないと、トランザクションが行われたと想定する可能性があります。実際には、まだ行われていません。