runOnUiThread 和 handler.post()
这两个示例中,都是在非主线程(子线程)环境中执行的代码片段。它们都试图将一个任务发送到主线程执行
public class TestMain extends ComponentActivity {
private Handler handler;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.item_left_menu);
handler = new Handler();
runOnUiThread(new Runnable() {
@Override
public void run() {
Message msg = Message.obtain();
msg.what = 666; // 消息标识
handler.sendMessage(msg);
}
});
handler.post(new Runnable() {
@Override
public void run() {
Message msg = Message.obtain();
msg.what = 666; // 消息标识
handler.sendMessage(msg);
}
});
}
}
runOnUiThread()
是Activity的方法,它更通用,不依赖于特定的Handler实例,适合在Activity或Fragment上下文中直接更新UI。
handler.post()
是基于Handler机制的方法,适用于已知有与主线程相关联Handler的情况,可以直接利用消息队列进行任务调度。同时,如果需要处理异步结果或者实现更复杂的线程间通信,Handler机制会更加灵活和强大