如何高效学习Handler?

【摘要】 高效学习模型
what–>why–>how 模型是什么?–>为什么使用?–>如何使用?–>实现原理–>总结分享(学以致用)
一.Handler是什么?
Handler是Android提供的一种线程间通信的机制
二.为什么使用Handler?
1.UI线程模型(理解): 当启动一个应用时,Android系统会开启一个线程来执行这个应用,该线程即为主线程(Mai…

高效学习模型

  • what–>why–>how 模型
  • 是什么?–>为什么使用?–>如何使用?–>实现原理–>总结分享(学以致用)

一.Handler是什么?

  • Handler是Android提供的一种线程间通信的机制

二.为什么使用Handler?

1.UI线程模型(理解):
当启动一个应用时,Android系统会开启一个线程来执行这个应用,该线程即为主线程(Main Thread),
该线程是唯一的,负责处理所有的界面显示及用户操作的响应任务,即负责android.widget和android.view包中所有控件的使用,
由于它负责所有的UI处理工作,故称为UI线程;
如果UI线程中加入了耗时操作,就会阻塞UI线程,给用户带来”死机”的感觉,故耗时操作必须新开线程执行,
但Android规定:非UI线程不能访问UI,故而引入了Hanler来进行线程间通信;
2.该模型中Android做了以下两点规定:
1).不能阻塞UI线程大于5s,否则会报ANR错误;
2).不能让非UI线程访问UI,否则会直接报错;
3.Android是使用大量的消息驱动方式来进行交互的,比如四大组件Activity,Service,Broadcast,ContentProvider的启动过程的交互,都离不开消息机制,
消息机制涉及Handler/Looper/MessageQueue/Message等4个类;
4.UI线程是非线程安全的,为何不设计为线程安全的?
1).UI具有可变性,甚至是高频可变性(如游戏);
2).UI对响应时间的敏感性要求UI操作必须高效;
3).UI组件必须批量来绘制来保证效率;

主线程创建及简要代码说明图:

生产消费模型理解UI线程工作原理图:

三.如何使用Handler?


Handler handler = new Handler(){
@Override
public void handleMessage(final Message msg) {
//这里接受并处理消息
}};
//发送消息
handler.sendMessage(message);
handler.post(runnable);

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享