Handler和Helper的区别是定义不同。handle指向某个类别的资源对象,如文件句柄,进程ID都可以用handle来表达,在当动词讲时含义是处理和操作。而handler表示的是过程(函数),理解为功能处理器的含义,如常用的回调函数可以用handler来表示。
在计算机编程术语里handle作为名词时是对可进行管理的资源对象的抽象,handle指向某个类别的资源对象,如文件句柄,进程ID都可以用handle来表达,在当动词讲时含义是处理和操作。而handler表示的是过程(函数),理解为功能处理器的含义,如常用的回调函数可以用handler来表示。
handler是Android给我们提供用来更新UI的一套机制,也是一套消息处理的机制,我们可以用它发送消息,也可以通过它处理消息。生命周期的改变都是通过handler消息改变的。
事实证明,子线程是可以更新UI的,但是如果子线程先休眠一段时间再去更新就会失败,这个还得从ViewRootImp的创建说起,ViewRootImp是在onResume()中创建的,没有休眠的子线程不会经历onResume()阶段,只有休眠过的子线程才会经历onResume()阶段,才会创建ViewRootImp,才会不能让子线程更新UI。但是我们不建议这么做,我们较好不要在子线程中更新UI。
Handler是用来结合线程的消息队列来发送、处理”Message对象”和”Runnable对象”的工具。
每一个Handler实例之后会关联一个线程和该线程的消息队列。也就是说,当你创建一个Handler的时候,从此开始,他就会自动关联到所在的线程/消息队列,然后它就会陆续把Message/Runnable分发到消息队列,并在他们出队的时候处理掉。因为android只允许在主线程中更新UI,Handler的目的就是作为线程通信的桥梁,进而再通过主线程更新UI。使用Handler这种异步回调机制,使我们可以再完成一个很长的任务后再做出相应的通知。
延伸阅读:
什么是Handler?
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。
在Android中,对于UI的操作通常需要放在主线程中进行操作。如果在子线程中有关于UI的操作,那么就需要把数据消息作为一个Message对象发送到消息队列中,然后,由Handler中的handlerMessage方法处理传过来的数据信息,并操作UI。当然,Handler对象是在主线程中初始化的,因为它需要绑定在主线程的消息队列中。
类sendMessage(Message msg)方法实现发送消息的操作。 在初始化Handler对象时重写的handleMessage方法来接收Message并进行相关操作。
文章标题:Handler和Helper的区别是什么,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37371