AsyncTaskのdoInBackground()メソッドからメインUIスレッドで宣言されたオブジェクトのインスタンスを使用するのは安全ですか?
3 に答える
あなたの質問は、Javaスレッドとスレッド間のオブジェクトアクセスについてです。
スレッド化の例のトピックについてよく理解するには、この例をご覧ください。
Asynctaskを作成したActivity/Fragmentは、おそらく画面の回転が原因で、実行の終了時にそこに存在できなかったため、安全ではありません。必要なオブジェクトをパラメータとして渡す必要があります。UIを更新するには、postExecuteメソッドを使用する必要があります。
スレッドセーフのみを意味する場合、Android 3.x +では、AsyncTaksのみを使用する場合はスレッドセーフである必要があります。これは、AsyncTasksがシリアルエグゼキュータで実行されるためです。Android 2.3では、が同時に実行されます。
編集
AsyncTaskのdoInBackgroundメソッドからUIを変更する必要がある場合は、アクティビティメソッドrunOnUiThreadを使用できます。
「メインUIスレッドで宣言されている」とはどういう意味かよくわかりません。スレッドは何も宣言していません。私はあなたがで宣言されていることを意味すると思いますActivity
。次に、はい、並行性の問題がないことを確認してください(たとえば、別のスレッドが同じインスタンスに書き込んでいるときにスレッドを読み取るなど)。synchronized
そしてvolatile
あなたの友達です。