javahandler使⽤⽅法_Android(java)学习笔记134:Handler
⽤。。。
⼀、Handler的定义:
Handler主要接收⼦线程发送的数据, 并⽤此数据配合主线程更新UI,⽤来跟UI主线程交互⽤。⽐如可以⽤handler发送⼀个message,然后在handler的线程中来接收、处理该消息,以避免直接在UI主线程中处理事务导致影响UI主线程的其他处理⼯作,Android提供了Handler作为主线程和⼦线程的纽带;也可以将handler对象传给其他进程,以便在其他进程中通过handler给你发送事件;还可以通过handler的延时发送message,可以延时处理⼀些事务的处理。
通常情况下,当应⽤程序启动时,Android⾸先会开启⼀个主线程 (也就是UI线程) , 主线程为管理界⾯中的UI控件,进⾏事件分发。如果此时需要⼀个耗时的操作,例如:联⽹读取数据,或者读取本地较⼤的⼀个⽂件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界⾯会出现假死现象,如果5秒钟还没有完成的话,会收到Android系统的⼀个错误提⽰"强制关闭".
这个时候我们需要把这些耗时的操作,放在⼀个⼦线程中,因为⼦线程涉及到UI更新,但是当⼦线程中有涉及到操作UI的操作时,就会对主线程产⽣危险,也就是说,更新UI只能在主线程中更新,在⼦线程
中操作是危险的. 这个时候,Handler就出现了来解决这个复杂的问题,由于Handler运⾏在主线程中(UI线程中),它与⼦线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受⼦线程传过来的(⼦线程⽤sedMessage()⽅法传递)Message对象,(⾥⾯包含数据), 把这些消息放⼊主线程队列中,配合主线程进⾏更新UI。
⼆、Handler⼀些特点
handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(⼀般是位于主线程), 也就是说Handler对象初始化后,就默认与对它初始化的进程的消息队列绑定,因此可以利⽤Handler所包含的消息队列,制定⼀些操作的顺序。
三、Handler中分发消息的⼀些⽅法
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
post类⽅法允许你排列⼀个Runnable对象到主线程队列中
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
sendMessage类⽅法, 允许你安排⼀个带数据的Message对象到队列中,等待更新.
四、应⽤实例:
学习java的学习方法1,传递Message。⽤于接受⼦线程发送的数据, 并⽤此数据配合主线程更新UI。
在Android中,对于UI的操作通常需要放在主线程中进⾏操作。如果在⼦线程中有关于UI的操作,那么就需要把数据消息作为⼀个Message对象发送到消息队列中,然后,⽤Handler中的handlerMessge⽅法处理传过来的数据信息,并操作UI。类
sendMessage(Message msg)⽅法实现发送消息的操作。 在初始化Handler对象时重写的handleMessage⽅法来接收Messgae并进⾏相关操作。
2,传递Runnable对象。⽤于通过Handler绑定的消息队列,安排不同操作的执⾏顺序。
Handler对象在进⾏初始化的时候,会默认的⾃动绑定消息队列。利⽤类post⽅法,可以将Runnable对象发送到消息队列中,按照队列的机制按顺序执⾏不同的Runnable对象中的run⽅法。
另外,Android的CPU分配的最⼩单元是线程,Handler⼀般是在某个线程⾥创建的,因⽽Handler和Thread就是相互绑定的,⼀⼀对应。⽽Runnable是⼀个接⼝,Thread是Runnable的⼦类。所以说,他俩都算⼀个进程。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。