84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
Handler与runOnUiThread更新UI有什么区别?分别更适合在哪种情况下用?
认证高级PHP讲师
從實作原理上,兩者別無二致,runOnUiThread也是借助Handler实现的。对于使用场景,runOnUiThread用法简单,并且共享了同一个Handler,用起来高效、方便。另外,如果在主线程中直接调用,runOnUiThread也可以判断并立即执行,不再推入消息队列。而Handler由于更加基础,所以可定制性要比runOnUiThread強,可以實現標記、延時等功能,並且可以推入其他訊息循環執行緒而非主執行緒。
runOnUiThread
Handler
runOnUiThread是直接將一個Runnable物件封裝成Message,交給主執行緒的Looper去執行。執行程式碼就是:
handler.post(mRunnable);
而Handler想要得到相同的效果,那麼首先Handler綁定的Looper必須是主線程的Looper,可以透過Looper.getMainLooper()取得。然後也是透過post去發送一個runable物件。
本質是沒有任何差別的。
從實作原理上,兩者別無二致,
runOnUiThread
也是借助Handler
实现的。对于使用场景,
runOnUiThread
用法简单,并且共享了同一个Handler
,用起来高效、方便。另外,如果在主线程中直接调用,runOnUiThread
也可以判断并立即执行,不再推入消息队列。而
Handler
由于更加基础,所以可定制性要比runOnUiThread
強,可以實現標記、延時等功能,並且可以推入其他訊息循環執行緒而非主執行緒。runOnUiThread是直接將一個Runnable物件封裝成Message,交給主執行緒的Looper去執行。執行程式碼就是:
而Handler想要得到相同的效果,那麼首先Handler綁定的Looper必須是主線程的Looper,可以透過Looper.getMainLooper()取得。然後也是透過post去發送一個runable物件。
本質是沒有任何差別的。