Handler

作者: 飞鱼和大海 | 来源:发表于2016-08-01 11:46 被阅读0次
  • Handler:更新UI和消息的发送和处理

  • 为什么要使用Handler?
    Android本身就封装了一套更新UI和消息处理机制,如果不用Handle,就会出现异常
    最根本解决多线程的问题

  • Handle负责消息的发送,Looper负责接收Handle发送的消息,并直接把消息回传给handle自己,MessageQueue是一个存储消息的容器

*更新的四种方法:

handler.post(),
handler.post.postDelayed(),
handler.sendMessage()
handler

eg:每隔3s更新文字
更新文本方法:hand.post(new Runnable)
必须要通过handler更新线程

Handler handler;
TextView textView;
new Thread(){
     public void run(){
         try{
            Thread.sleep(3000);
            handle.post(new Runnable(){
                public void run(){
                    textView.setText("更新文本");
}
});
}catch{
         e.printStackTrace();
}
}
}.start();

eg:实现图片轮播(每隔3s)
1.在drawable中设置图片

Handler handler;
MyRunnable myRunnable;
int image[]={R.drawable.meinv_1,R.drawable.meinv_2;R.drawable.meinv_3};

2.实现图片轮播


class MyRunnable implements Runnable{
        public void run(){
         index++;
         index=index%3;
         imageView.setImageResource(image[index]);
         handler.postDelayed(myRunnable,3000);
}

}

3.在主方法中实现更新

handler.postDelayed(myRunnable,3000);

取消轮播
在点击方法中取消

handler.removeCallbacks(myRunnable);

eg:更新文本

Handler handler=new Handler(){
      public void handleMessage(Message message){
          textView.setText(""+msg.arg0+""+msg.arg1+""+msg.obj);
          super.handleMessage(message);
}
}

2.在主方法中设置
//发送消息也可通过message

Message message=Handle.obtainMessage();
message.sendToTarget();
new Thread(){
        public void run(){
            try{
          Thread.sleep(3000);
          Message message=new Message();
        message.arg0=88;
        message.arg1=44;
       Person person=new Person();
        person.age=40;
//发送很多消息时用obj
         person.name="张三";
         message.obj=person;
        handler.sendMessage(message);
}catch{
      e.printStackTrace();
}
    super.run();
}
//千万不要忘记start,这是启动线程
}.start();

3.在主类中

class Person{
  public String name;
  public int age;
  public String toString(){
    return "姓名:"+name+",年龄:"+age;
}
}

eg:拦截消息

Handler handler=new Handler(new CallBack{
  public boolean handleMessage(Message message){
    Toast.makeText(getApplicationContext(),""+1;1);
    //如果返回false的话就不显示2
}
      return true;
}){ public void handleMessage(Message message){
    Toast.makeText(getApplicationContext(),""+2;1);
}
};

2.在点击中

handler.sendEmptyMessage(1);

相关文章

网友评论

      本文标题:Handler

      本文链接:https://www.haomeiwen.com/subject/xcexsttx.html