在开发过程中,发现Handler无处不在,更多的是直接new出一个Handler仅仅是为了在UI线程执行一句代码。
Handler mHandler = new Handler();
.....
mHandler.post(new Runnable() {
public void run() {
textView.setText(R.string.success);
}
});
是,Handler很强大,但有那么一些地方根本不必自己去使用Handler,或许有更好的方法呢?如仅仅是子线程更新界面,google的工程师们已经替我们想好了,其实Activity中提供了这么一个方法:
public final void runOnUiThread (Runnable action)
Added in
API level 1
Runs the specified action on the UI thread. If the current thread is the UI thread, then the action is executed immediately. If the current thread is not the UI thread, the action is posted to the event queue of the UI thread.
Parameters
action | the action to run on the UI thread |
---|
其中的action将会被保证在UI线程去执行.
其实看源码的话,你会发现,这个方法的实现跟你想做的没什么,但是它替你做了,我们又何必重复呢
/**
* Runs the specified action on the UI thread. If the current thread is the UI
* thread, then the action is executed immediately. If the current thread is
* not the UI thread, the action is posted to the event queue of the UI thread.
*
* @param action the action to run on the UI thread
*/
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}