关闭

Handlder

标签: Handler
62人阅读 评论(0) 收藏 举报
分类:
 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();
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13573次
    • 积分:733
    • 等级:
    • 排名:千里之外
    • 原创:62篇
    • 转载:6篇
    • 译文:0篇
    • 评论:0条
    文章分类