public class MainActivity
extends AppCompatActivity {
private static final String
TAG =
"TestHandlerActivity";
//主线程中的handler
private Handler
mHandler =
new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg)
;
//获得刚才发送的Message对象,然后在这里进行UI操作
Log.
e(
TAG,"------------> msg.what = " + msg.
what)
;
}
}
;
//子线程中的handler
private Handler
mHandlerThread =
null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
;
setContentView(R.layout.
activity_main)
;
initData()
;
}
private void initData() {
//开启一个线程模拟处理耗时的操作
new Thread(
new Runnable() {
@Override
public void run() {
SystemClock.
sleep(
2000)
;
//通过Handler发送一个消息切换回主线程(mHandler所在的线程)
mHandler.sendEmptyMessage(
0)
;
//调用Looper.prepare()方法
Looper.
prepare()
;
//在子线程中创建Handler
mHandlerThread =
new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg)
;
Log.
e(
"sub thread","---------> msg.what = " + msg.
what)
;
}
}
;
mHandlerThread.sendEmptyMessage(
1)
;
//调用Looper.loop()方法
Looper.
loop()
;
}
}).start()
;
}
}
当我们在子线程使用Handler的时候要手动调用Looper.prepare()创建一个Looper对象,之所以主线程不用,是系统启动的时候帮我们自动调用了Looper.prepare()方法。
详细分析以及源码 可以看这里 :点击打开链接