2019android面试中,大多数面试官都会问到handler,今天有空来总结下关于Handler的一些用法,希望可以帮到一些正在找工作的小白程序员。
1.首先我们得了解Handler是什么?
Handler是一套在 Android开发中 进行异步消息传递的机制。
2.Handler在android中有何作用?
在Android开发中多线程的应用中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理。
3.为什么要使用Handler去处理UI更新操作?
在多个线程并发更新UI的同时 保证线程安全。
4.Handler的原理是什么?
在了解Handler原理之前我们需要了解几个重要的类
Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。
Handler:内部会跟Looper进行关联,也就是说在handler的内部可以找到Looper,找到Looper也就找到了MessageQueue,在handler中发送消息,其实就是向MessageQueue队列中发送消息
MessageQueue:消息队列,可以添加消息并处理消息
Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。
Thread:线程,负责调度整个消息循环,即消息循环的执行场所。
总结:handler负责发送消息,Looper负责接收handler发送的消息,并直接把消息回传给handler自己。MessageQueue就是一个存储消息的容器。
5.Handler的主要用法?
1)handler.post()
主线程创建handler,在子线程中通过handler的post(Runnable)方法更新UI信息。
2)handler.postDelayed()
主线程创建handler,通过handler.postDelayed(myRunnable,1000)
3)handler.sendMessage();
4)handler.sendEmptyMessage();
5)handler.removeCallback(runnable)
6.如何实现一个和线程相关的Handler?
7.HandlerThread是什么?
当主线程handler中传入子线程的looper时,程序直接奔溃,报空指针错误,原因时存在多线程并发的问题,当两个线程在切换的时候,在程序运行到主线程中handler的创建时,传入了子线程的looper,而此时子线程中的looper还没有创建出来,所以会抛出空指针异常,那么这个问题怎么避免呢,就用到了HandlerThread.
HandlerThread用法:
通过HandlerThread的getLooper()方法可以很好地解决多线程并发产生的空指针异常的问题
对于Handler就说到这里吧,写的不是很好,大部分都是看教程整理的,如果有小白需要android的一些项目视频教程,可以找我要百度云链接。