Android中更新UI常见的方式有4种:runOnUIThread、handler post、handler sendMessage、view post.

    先使用handler post的方法更新UI

wKiom1e6VozSPwCkAADzdEm-C48402.png-wh_50

    handler.post(r)方法中需要传递进去一个Runnable对象,可以直接在里面新建一个Runnable对象,接着在Runnable的run方法中对UI进行操作

进入 handler.post(r)的源码中

wKiom1e6V3bDk2tjAAEtgFf9AoU796.png-wh_50

    可以看到,其实这种方法里面也是通过发送延迟消息的方式对UI进行操作的。

    

    下面用handler sendMessage更新UI

wKiom1e6iCCT8NkeAADcRnLTPqE397.png-wh_50

wKioL1e6iCHhrIkEAAC-9RoYQJo202.png-wh_50

    该方法就是通过在子线程中发送消息通知主线程更改UI,这是比较常见的方式


    下面用runOnUIThread的方法

wKiom1e6ihbRk6aLAADbTAOraGM451.png-wh_50

runOnUIThread(action)需要传递一个Runnable对象作为参数,此时可以new一个Runnable再实现它的run方法,在run方法里对UI进行操作

wKioL1e6jS-StQvTAADJAbeHr90851.png-wh_50

从源码当中可以看到,系统先会判断该线程是否为UI线程,如果不是就通过handler去更新,是就通过UI线程的run方法更新


    下面用view post方法

wKiom1e6i5aT-gsdAADethkVDNg334.png-wh_50

源码

wKioL1e6jdvTC4P8AAEg7feZ4K0335.png-wh_50


其实这四种方法都是通过handler对UI进行更新的,只是具体方法形式存在大同小异的区别而已