android Handler详解

Handler的主要作用就是当子线程执行完任务后需要对主线程(UI线程)进行更新时,向主线程发送消息。
通过主线程来更新UI,之所以需要通过主线程来更新UI。主要是为了防止多个线程更新UI而导致的错乱。
自google官方2.2以后,Google就规定sdk2.2以后的版本就不允许子线程进行更新主线程。

 因为在Android系统中UI操作并不是线程安全的,如果多个线程并发的去操作同一个组件,可能导致线程安全问题。
 为了解决这一个问题,android制定了一条规则:只允许UI线程来修改UI组件的属性等,也就是说必须单线程模型,
 这样导致如果在UI界面进行一个耗时叫长的数据更新等就会形成程序假死现象 也就是ANR异常,如果20秒中没有完成程序就会强制关闭。
 所以比如另一个线程要修改UI组件的时候,就需要借助Handler消息机制了。

   1. void  handleMessage( Message  msg):处理消息的方法,该方法通常被重写。

   2.final boolean hasMessage(int  what):检查消息队列中是否包含有what属性为指定值的消息

   3.final boolean hasMessage(int what ,Object object) :检查消息队列中是否包含有what好object属性指定值的消息

   4.sendEmptyMessage(int what):发送空消息

   5.final Boolean send EmptyMessageDelayed(int what ,long delayMillis):指定多少毫秒发送空消息

   6.final  boolean sendMessage(Message msg):立即发送消息

   7.final boolean sendMessageDelayed(Message msg,long delayMillis):多少秒之后发送消息

EmptyMessageDelayed和sendMessageDelayed区别:
EmptyMessageDelayed是在指定的时间之后发送:myHandler.sendEmptyMessageAtTime(0,SystemClock.uptimeMillis()+3000);
sendMessageDelayed是在指定毫秒之后发送:myHandler.sendMessageDelayed(myHandler.obtainMessage(2), 2000);

与Handle工作的几个组件Looper、MessageQueue各自的作用:

  1.Handler:它把消息发送给Looper管理的MessageQueue,并负责处理Looper分给它的消息

   2.MessageQueue:采用先进的方式来管理Message

   3.Looper:每个线程只有一个Looper,比如UI线程中,系统会默认的初始化一个Looper对象,它负责管理MessageQueue,不断的从MessageQueue中取消息,并将

                    相对应的消息分给Handler处理

     
 Message 与obtainMessage区别:主要是obtainMessage采用的是单例模式 
     
     
     
     
     
     
     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值