私はrunOnUiThread
とHandlers
の両方に遭遇しましたが、私にとっては、それはまだ正確にどの事実が異なるのか疑問であるようです。HandlerとrunOnUiThreadの違いは何ですか?
UIを更新するにはどうすればよいでしょうか? runOnUiThread
またはHandler
を使用する必要がありますか?
すでに完了しましたlink。まだ違いを正当化することはできません。
ありがとうございました
私はrunOnUiThread
とHandlers
の両方に遭遇しましたが、私にとっては、それはまだ正確にどの事実が異なるのか疑問であるようです。HandlerとrunOnUiThreadの違いは何ですか?
UIを更新するにはどうすればよいでしょうか? runOnUiThread
またはHandler
を使用する必要がありますか?
すでに完了しましたlink。まだ違いを正当化することはできません。
ありがとうございました
runOnUiThreadは、メインUIハンドラを使用するメソッドなので、基本的に同じです。唯一の違いは、あなたがuiハンドラの中でそれを呼び出すと、それをポストするのではなく実行するということです。
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
ハンドラはイベントキューを実装するのに便利です。メインスレッドで実行する必要はなく、独自のルーパーを設定することもできます。 RunOnUiThreadは基本的にはショートカットなので、実際にはハンドラを起動しないなどです。
ハンドラが宣言されている自身を登録します。ルーパを手動で設定することもできます。
ハンドラは、複数回のデータをメインスレッドに投稿したい場合に特に便利です。
runOnUiThreadはアクティビティの方法です。 UIスレッドを更新する必要があるときは、次のようにコードを記述する必要があります。
runOnUiThread(new Runnable() {
@Override
public void run() {
// update the ui
}
});
再利用性はありません。
たとえば、ダウンロードしているファイルのステータスを更新したいとします。上記のメソッドを複数回記述する必要があります。
ハンドラオブジェクトを使用すると、同じハンドラオブジェクトを使用してUIが複数回更新されます。
私はこれ以外のことを知っています。 –
「それ以外」はどういう意味ですか?ハンドラを使用する必要がある場合は、ハンドラごとにメモリを割り当てる必要があります。また、あなたがすでにあなたのUIハンドラで作業しているかどうかを制御する必要があります。メソッド自体はあなたのためにそれを行います。 –