主要接受子线程发送的数据, 并用此数据配合主线程更新UI。
Handler的创建、发送、处理消息都要在Looper.prepare()、Looper.loop()之间。
一个Looper维护一个消息队列,不同的Looper之间的消息队列各自独立,不会影响。
handler.sendEmptyMessage(1);
handler.post(new Runnable() {
@Override
public void run() {
textView.setText("update ui");
}
});
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText("update ui");
}
});
textView.post(new Runnable() {
@Override
public void run() {
textView.setText("update ui");
}
});
private HandlerThread thread;
thread = new HandlerThread("Handler Thread") {
@Override
protected void onLooperPrepared() {
super.onLooperPrepared();
//TODO 子线程操作
textView.setText("onLooperPrepared");
}
};
thread.start();
handler = new MyHandler(thread.getLooper(), XActivity.this);
handler.sendEmptyMessage(1);
static class MyHandler extends Handler {
WeakReference<XActivity> weakReference;
public MyHandler(XActivity activity) {
this.weakReference = new WeakReference<XActivity>(activity);
}
public MyHandler(Looper looper, XActivity activity) {
super(looper);
this.weakReference = new WeakReference<XActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
XActivity XActivity = weakReference.get();
if (XActivity != null) {
//TODO
}
}
}