新しいスレッドを開始するクラスがあり、ハンドラーを使用して ui スレッドに配列を書き込みます。スレッドセーフです。
これらのスレッドをタイマー タスクから開始した場合、これらのスレッドは UI スレッドでスレッドセーフですか?
ありがとうございました!
新しいスレッドを開始するクラスがあり、ハンドラーを使用して ui スレッドに配列を書き込みます。スレッドセーフです。
これらのスレッドをタイマー タスクから開始した場合、これらのスレッドは UI スレッドでスレッドセーフですか?
ありがとうございました!
Handler
オブジェクトがUIスレッドにバインドされている場合は、(配列もUIスレッドにバインドされていると仮定して)の配列を更新しても安全ですHandler
。
Handler
ドキュメント、特にこの部分を確認してください。
ハンドラーを使用すると、スレッドのMessageQueueに関連付けられたMessageオブジェクトとRunnableオブジェクトを送信および処理できます。各Handlerインスタンスは、単一のスレッドとそのスレッドのメッセージキューに関連付けられています。新しいハンドラーを作成すると、それを作成しているスレッドのスレッド/メッセージキューにバインドされます。その時点から、メッセージとランナブルがそのメッセージキューに配信され、メッセージから出てきたときに実行されます。列。
ハンドラーの主な用途は2つあります。(1)メッセージとランナブルを将来のある時点で実行するようにスケジュールする。(2)自分のスレッドとは異なるスレッドで実行されるアクションをキューに入れる。
これは、Handler
コードが属するスレッドで実行されることを示しています。
AsyncTask
実行するスレッドが適切にスレッドセーフである場合、UIスレッド、an、またはのどこからスレッドを開始してもかまいませんTimerTask
。