Handler与runOnUiThread更新UI有什么区别?分别更适合在哪种情况下用?
认证高级PHP讲师
実装原則の点では、runOnUiThread も Handler の助けを借りて実装されます。 使用シナリオの場合、runOnUiThread は使いやすく、同じ Handler を共有するため、効率的で使いやすくなります。また、メインスレッド内で直接呼び出された場合、runOnUiThreadをメッセージキューにプッシュせずに即座に判定して実行することもできます。 と Handler は、runOnUiThread よりも基本的なため、マーキングや遅延などの機能を実装でき、メイン スレッドの代わりに他のメッセージ ループ スレッドをプッシュできます。
runOnUiThread
Handler
runOnUiThread は、Runnable オブジェクトを Message に直接カプセル化し、実行のためにメイン スレッドの Looper に渡します。実行コードは次のとおりです:
Handler が同じ効果を得たい場合は、まず Handler によってバインドされる Looper がメインスレッドの Looper である必要があります。これは Looper.getMainLooper() を通じて取得できます。次に、実行可能なオブジェクトもポスト経由で送信します。
本質的には違いはありません。
実装原則の点では、
runOnUiThread
もHandler
の助けを借りて実装されます。使用シナリオの場合、
runOnUiThread
は使いやすく、同じHandler
を共有するため、効率的で使いやすくなります。また、メインスレッド内で直接呼び出された場合、runOnUiThread
をメッセージキューにプッシュせずに即座に判定して実行することもできます。と
Handler
は、runOnUiThread
よりも基本的なため、マーキングや遅延などの機能を実装でき、メイン スレッドの代わりに他のメッセージ ループ スレッドをプッシュできます。runOnUiThread は、Runnable オブジェクトを Message に直接カプセル化し、実行のためにメイン スレッドの Looper に渡します。実行コードは次のとおりです:
リーリーHandler が同じ効果を得たい場合は、まず Handler によってバインドされる Looper がメインスレッドの Looper である必要があります。これは Looper.getMainLooper() を通じて取得できます。次に、実行可能なオブジェクトもポスト経由で送信します。
本質的には違いはありません。