亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android Handler的使用

標簽:
Android
Handler的最大作用就是线程的切换

Handler 对象既发送信息又处理消息

把一个消息从一个线程发送到另一个线程
 //在主线程创建一个Handler对象。
    //重写Handler的handleMessage方法,这个就是接收并处理消息的方法。
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //msg就是子线程发送过来的消息。
        }
    };

    //开启一个子线程
    new Thread(new Runnable() {
            @Override
            public void run() {
                //在子线程发送一个消息。
                Message msg = new Message();
                handler.sendMessage(msg);
            }
        }).start();
发送一个空消息
handler.sendEmptyMessage(what);
Message对象有一个Object类型的obj属性
   Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            Log.i(TAG,"Handler 发送过来的消息是:" + msg.obj);
        }
    };

    new Thread(new Runnable() {
            @Override
            public void run() {
                Message msg = new Message();
                msg.obj = "我是消息数据";
                handler.sendMessage(msg);

            }
        }).start();

使用 what 来标识消息

  Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {

            switch (msg.what) {
                case 1:
                    Log.i(TAG, "第一个消息是:" + msg.obj);
                    break;

                case 2:
                    Log.i(TAG, "第二个消息是:" + msg.obj);
                    break;
            }
        }
    };

    new Thread(new Runnable() {
            @Override
            public void run() {
                Message msg1 = new Message();
                msg1.obj = "第一个消息";
                msg1.what = 1;
                handler.sendMessage(msg1);

                Message msg2 = new Message();
                msg2.obj = "第二个消息";
                msg2.what = 2;
                handler.sendMessage(msg2);
            }
        }).start();

Handler还可以post一个Runnable

   new Thread(new Runnable() {
            @Override
            public void run() {
                //在子线程post一个Runnable对象
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        //这里是消息处理的方法
                        //这里运行在主线程。
                    }
                });
            }
        }).start();

子线程使用Handler

    //声明Handler;
    Handler handler;
    new Thread(new Runnable() {
        @Override
        public void run() {
            //创建当前线程的Looper
            Looper.prepare();
            //在子线程创建handler对象
            handler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    //这里是消息处理,它是运行在子线程的
                }
           };
           //开启Looper的消息轮询
           Looper.loop();
       }
   }).start();

   mBanner.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           //在主线程发送一个消息到子线程
           Message msg = new Message();
           handler.sendMessage(msg);
       }
   });
退出消息轮询
  Looper.myLooper().quit();
  Looper.myLooper().quitSafely();

用指定的Looper来创建Handler

    new Thread(new Runnable() {
        @Override
        public void run() {
            //获取主线程的Looper
            Looper looper = Looper.getMainLooper();
            //用主线程的Looper创建Handler
            handler = new Handler(looper) {
                @Override
                public void handleMessage(Message msg) {
                //这里是运行在主线程的
                }
            };
        }
    }).start();

同一消息不能发两次

 //同一个Message发送了两次
    Message msg = Message.obtain();
    handler.sendMessage(msg);
    handler.sendMessage(msg);
點擊查看更多內容
2人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消