Handlder

原创 2016年08月30日 21:06:28
 Message        产品
 MessageQueue   仓库
 Looper         循环
 Handler        物流
 Handler.Callback  回调接口

主线程不能做耗时操作
子线程不能操作绝大多数UI控件
在子线程能做的事情尽量不要在主线程中去做。例如,int转为字符串。

  private TextView textView;
    private Handler handler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message message) { //handler要怎么处理message
            switch (message.what) {
                case 0:
                    textView.setText((String) message.obj);
                    break;
            }
            return true;
        }
    });

方法1

 new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 100; i++) {
                 SystemClock.sleep(1000);//睡眠一秒
//                  Message message = new Message();  不推荐使用
                    Message message = Message.obtain();//obtain获得一个message对象,从一个池中,当message用过之后会被放到池中,直接拿来使用不需再创建
                    message.what = 0; //表示这个message 是做什么的
                    message.obj = String.valueOf(i);//obj 存放Object类型,arg1 ,arg2 存放int型,setData 存放Bundle 类型数据
//                  message.sendToTarget();  发送message
                    handler.sendMessage(message); //发送消息
                }
            }
        }).start();

方法2

Message message = Message.obtain();里的参数可以写handler,和what ,obj,arg1,arg2
如果有handler参数,则可以通过message.sendToTarget();发送消息。
效果跟上面相同

    Message message = Message.obtain(handler, 0, String.valueOf(i));
           message.sendToTarget();

方法3

handler.obtainMessage(0, String.valueOf(i)).sendToTarget();
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)