2019android面试常客之Handler详解

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的一些项目视频教程,可以找我要百度云链接。

 

 

 

 

你可能感兴趣的:(android,2019android,android面试,handler,2019面试)