android handler和message的常用方法

来源:互联网 发布:医药软件排行 编辑:程序博客网 时间:2024/05/13 17:23

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中















原创粉丝点击