main thread
(主线程)也叫UI thread
(UI线程)
背景
从Android4.0
开始,
Android
中请求网络强制不允许在主线程中操作,
而更新UI
的操作由不允许在子线程中更新UI
。
为什么Android从4.0开始就不允许在主线程连接网络?
为什么Android从4.0开始就不允许在非UI线程中进行UI操作?
Android 4.0 和 Android 6.0 版本改动很多,前者主要是限制UI操作,后者主要是规范权限使用
应用场景
当我们的码农在子线程中请求网络,拿到服务器返回的数据之后,要更新UI
。
由于系统的要求,势必会产生一种矛盾:数据在子线程,更新UI要在主线程。
此时我们必须要把数据返回到主线程中才行,Handler
机制应运而生。
Handler
机制是什么?
答:Handler
机制是Android
中用于线程间通信一套通信机制。
//在主线程中初始化Handler
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//在此处处理消息
}
};
Thread thread = new Thread(){
@Override
public void run() {
super.run();
//在子线程中发送消息
Message msg = new Message();
msg.arg1 = 5;
handler.sendEmptyMessage(msg);
}
};
thread.start();
如果觉得Handler
机制繁琐,可调用 Activity
的 runOnUiThread()
方法
runOnUiThread(new Runnable() {
void run() {
// Do stuff…
}
});