- 下面这篇文章写出了我的心声,我就不详细写了。
handler.post和handler.sendMessage的区别和联系 - 结论是:post()方法可以直接切换到UI线程。
- 直接上测试代码
public class MainActivity extends AppCompatActivity {
private TextView tv1,tv2;
private Handler handler_post = new Handler();
Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
tv1.setText("sendMessage");
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = findViewById(R.id.tv1);
tv2 = findViewById(R.id.tv2);
new Thread(new Runnable() {
@Override
public void run() {
handler.sendEmptyMessage(1);
handler_post.post(new Runnable() {
@Override
public void run() {
tv2.setText("post");
}
});
}
}).start();
}
}
运行效果
- 这和runOnUiThread()方法有区别吗?
- 还真没啥区别。看看Activity.java中的源码,就知道了。
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
下面这篇文章写得太好了。
runOnUiThread 、Handler.post、View.post分析