2012-05-07 12 views

答えて

3

あなたは何を意味するのか正確にはわかりません。 FragmentTransaction.commit()を呼び出すUIスレッドにメッセージを送信する他のスレッドが常に存在する可能性があります。

ただし、すべてのトランザクションの直後にコミットを呼び出さない理由はわかりません。

フラグメントやその依存データに変更があった場合でも、NullPointerエラーが発生することがあります。遅れている間は、すぐにコミットを呼び出すときとは異なる状態になります。

この場合も、すべての変更が確実に行われるようにfragmentManager.executePendingTransactions()に電話する必要があります。そうしないと、実際に取引が行われていないとみなされます。

+0

私はFacebookのSDKを使用しています。そのコールバックの1つは別のスレッドで発生します。私はコールバックから 'ProgressDialog'または' AlertDialog'を表示できるかどうか、あるいはUIスレッドにリクエストを送る必要があるのだろうかと思っていました。 – cesar

+0

私はFacebook SDKに精通していませんが、(ProgressDialogやAlertDialogのように)消えるかもしれないフラグメントを使用する場合は注意が必要です。これらのフラグメントに依存する他のオブジェクトのすべてのメソッドに、これらのフラグメントがなくなった場合に通知されるようにする必要があります。単にユーザが「戻る」を押すことによって)。しかし、これらのフラグメントは好きな場所から作成することができます。なぜなら、あなたはそれらをUIアクティビティに/添付する必要があるからです – user387184

11

この質問は1年前ですが、多くの人々が遭遇する問題であると思われるため、この質問に回答したいと思いました。

コミットメソッドを呼び出すことを含めて、コミットメソッドを呼び出すことを含めて、は、UI以外のスレッドでは安全です。なぜなら、FragmentTransaction内で発生する作業はUIを直接操作しないためです。 FragmentTransactionのメソッド呼び出しは、実行される作業指示のリストとして単純にパッケージ化されています。

コミットメソッドを呼び出すと、その命令パッケージがUIスレッドに送られて処理されます。

関連する問題