1.
private class AsyncServiceHandler extends Handler {
AsyncServiceHandler(android.os.Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
...........................................
case WifiManager.ENABLE_TRAFFIC_STATS_POLL: {
...........................................
}
private AsyncServiceHandler mAsyncServiceHandler;
mAsyncServiceHandler = new AsyncServiceHandler(wifiThread.getLooper());
Message msg;
msg = Message.obtain(mAsyncServiceHandler, WifiManager.ENABLE_TRAFFIC_STATS_POLL, 0, 0);
msg.sendToTarget();
這裡Message.obtain表示obtain Message object from the global pool, 第一個參數表示發送的handler目標,第二個為what, 第三個為arg1, 第四個為arg2,看函數原型就知道了:
public static Message obtain(Handler h, int what, int arg1, int arg2) {
Message m = obtain();
m.target = h;
m.what = what;
m.arg1 = arg1;
m.arg2 = arg2;
return m;
}
最後調用msg.sendToTarget()將訊息發送到AsyncServiceHandler中,AsyncServiceHandler繼承並重寫handleMessage方法,在handleMessage中根據switch處理接收到的訊息
2.
Handler mhandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int what = msg.what;
switch(what){
case 2:
String shortFileNames = msg.getData().getString("packagename");
........................自己的處理方法............................
}
};
Message msg = mhandler.obtainMessage();
Bundle b = new Bundle();// 存放資料
msg.what = 2;
b.putString("packagename", shortfileNames.get(i));
msg.setData(b);
mhandler.sendMessage(msg); // 向Handler發送訊息,更新UI
原理和上面1其實是一樣的,也是從訊息池中擷取message,這樣不用新new一個,可以節省資源,new Bundle()用來存放資料,然後mhandler.sendMessage將訊息發送到Handler中