私はUIスレッドでこれを呼び出さなければならないかどうか不思議です。ドキュメントによると、commit
は、将来的にUIスレッド上で実行されます。この場合、別のスレッドでFragmentTransaction.commit()
を実行できますか?AndroidのFragmentTransaction.commit()メソッドはスレッドセーフですか?
2
A
答えて
3
あなたは何を意味するのか正確にはわかりません。 FragmentTransaction.commit()を呼び出すUIスレッドにメッセージを送信する他のスレッドが常に存在する可能性があります。
ただし、すべてのトランザクションの直後にコミットを呼び出さない理由はわかりません。
フラグメントやその依存データに変更があった場合でも、NullPointerエラーが発生することがあります。遅れている間は、すぐにコミットを呼び出すときとは異なる状態になります。
この場合も、すべての変更が確実に行われるようにfragmentManager.executePendingTransactions()
に電話する必要があります。そうしないと、実際に取引が行われていないとみなされます。
11
この質問は1年前ですが、多くの人々が遭遇する問題であると思われるため、この質問に回答したいと思いました。
コミットメソッドを呼び出すことを含めて、コミットメソッドを呼び出すことを含めて、は、UI以外のスレッドでは安全です。なぜなら、FragmentTransaction内で発生する作業はUIを直接操作しないためです。 FragmentTransactionのメソッド呼び出しは、実行される作業指示のリストとして単純にパッケージ化されています。
コミットメソッドを呼び出すと、その命令パッケージがUIスレッドに送られて処理されます。
関連する問題
- 1. SmtpClient.SendMailAsyncメソッドはスレッドセーフですか?
- 2. IntentServiceのonStartCommand(..)メソッドはスレッドセーフですか?
- 3. System.ArrayのSetValue/GetValueメソッドはスレッドセーフですか?
- 4. この静的メソッドはスレッドセーフですか?
- 5. QTimerのisActive()メソッドはスレッドセーフですか?
- 6. 静的メソッドはスレッドセーフですか
- 7. 拡張メソッドはスレッドセーフですか?
- 8. 静的メソッドのスレッドセーフです
- 9. JavaのexecuteUpdateメソッドはスレッドセーフなものですか?私のアプリケーションで
- 10. Android LruCache(Android 3.1)スレッドセーフ
- 11. codahale metricsのメーターマーク()メソッドはどのようにスレッドセーフですか?
- 12. Androidでのスレッドセーフなプログレッシブダウンロード
- 13. 静的メソッドのJava配列はスレッドセーフですか?
- 14. System.Collections.Concurrentコレクションの拡張メソッドはスレッドセーフですか?
- 15. Rubyクラスのメソッドはスレッドセーフですか?例えば
- 16. javaスレッドセーフ:スレッドセーフですか?
- 17. サーブレットで宣言されたメソッドはスレッドセーフであるか、サーブレットのローカル変数はスレッドセーフです
- 18. Androidプロジェクトのハンドラー:スレッドセーフ
- 19. EF6 DBContextの拡張メソッド、スレッドセーフ
- 20. OpenCV Detectメソッドをスレッドセーフにするには?
- 21. この静的Javaメソッドはスレッドセーフではないのはなぜですか?
- 22. strcmpではスレッドセーフですか?
- 23. はPythonスレッドセーフで+ =ですか?
- 24. HttpServletで独自のメソッドを宣言するのはスレッドセーフですか?
- 25. Javaスレッドセーフ:enumと静的メソッド
- 26. 別のスレッドからスレッドで非スレッドセーフなメソッドを呼び出す
- 27. スレッドセーフなメソッドを書くには?
- 28. DocumentBuilder.parse()はスレッドセーフですか?
- 29. ステートレスセッションはスレッドセーフですか?
- 30. ValueExpressionはスレッドセーフですか?
私はFacebookのSDKを使用しています。そのコールバックの1つは別のスレッドで発生します。私はコールバックから 'ProgressDialog'または' AlertDialog'を表示できるかどうか、あるいはUIスレッドにリクエストを送る必要があるのだろうかと思っていました。 – cesar
私はFacebook SDKに精通していませんが、(ProgressDialogやAlertDialogのように)消えるかもしれないフラグメントを使用する場合は注意が必要です。これらのフラグメントに依存する他のオブジェクトのすべてのメソッドに、これらのフラグメントがなくなった場合に通知されるようにする必要があります。単にユーザが「戻る」を押すことによって)。しかし、これらのフラグメントは好きな場所から作成することができます。なぜなら、あなたはそれらをUIアクティビティに/添付する必要があるからです – user387184