private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SUCCESS:
ivIcon.setImageBitmap((Bitmap) msg.obj);
break;
case ERROR:
Toast.makeText(MainActivity.this, "抓取失败", Toast.LENGTH_LONG).show();
break;
}
}
};
1,
Message message = new Message();
message.obj = object;
handler.sendMessage(message);
2,服用系统提供的。
Message message = handler.obainMessage();
message.obj = object;
handler.sendMessage(message);
3,handler.sendMessage(message);
作用等同于:
message.sendToTarget();
移除消息
handler.removeCallbacks(runbale);
mHandler = new Handler( mCallback ) ;
private Handler handler = new Handler(new CallBack){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SUCCESS:
ivIcon.setImageBitmap((Bitmap) msg.obj);
break;
}
}
};
同上:
public class HandlerDemo {
private Handler myHandler1 = new Handler(new MyHandlerCallback());
private Handler myHandler2 = new MyHandler();
private class MyHandlerCallback implements Handler.Callback {
@Override
public boolean handleMessage(Message msg) {
// Handle messages.
return false;
}
}
private class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
// Handle messages.
}
}
}
CallBack里面的函数,如果return 为false,着不会做其他的操作,
如果return=true,这会拦截public void handleMessage(...)函数的的操作。
public boolean handleMessage(Message msg) {
// Handle messages.
return false;
}
HandlerThread
创建一个HandlerThread,即创建了一个包含Looper的线程。
HandlerThread handlerThread = new HandlerThread("leochin.com");
handlerThread.start(); //创建HandlerThread后一定要start()
获取HandlerThread的Looper
Looper looper = handlerThread.getLooper();
创建Handler,通过Looper初始化
Handler handler = new Handler(looper);
HandlerThread thread = new HandlerThread("handler thread");
thread.start();
handler = new Handler(thread.getLooper(){
public void handleMessage(android.os.Message msg){
Sout("current thread ------>"+Thread.currentThread());
}
});
handler.sendEmpthMessage(1);
handler常见 报错
1,Only the original thread that create a view hierarchy can touch its view
由于:在子线程中修改主线程的UI
2,Can not create handler inside thread t….
缺少Looper.loop();
new Thread(){
public void run(){
Handler handler = new Handler();
}
}.start();