Handler机制的简单原理
来源:互联网 发布:人工智能教学百度云 编辑:程序博客网 时间:2024/05/21 12:50
说起handler相信大家都不陌生但是真正解释起来不是那么简单的 平时面试中常见问题还会经常遇到,我们基本上都是似懂非懂的去面对
大体上来说handler经常在开发中遇到的就是耗时操作之类的一些问题,还有就是解决线程之间的问题。
在UI线程:
handler对象首先在主界面中进行声明,并覆盖其中的handleMessage(msg)方法。该方法用来接收子线程传递来的Message对象。
在子线程:
子线程启动后,首先创建Message对象。然后将待发送的数据放入Message对象中,并使用handler的sendMessage(msg)来发送msg对象,发送成功够,handleMessage(msg)拿到msg对象,并用这个msg对象里面的数据 来在主线程中更新手机界面。
因为android UI界面不是线程安全的,不允许子线程更新主UI线程,为了达到主界面的更新操作,此时便有了Handler对象.
Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。Android利用Handler来实现UI线程的更新的。
Handler是Android中的消息发送器,其在哪个Activity中创建就属于且紧紧属于该Activity。还可以说其在哪个线程中new的,就是那个线程的Handler。
Handler特点 :
handler可以分发Message对象和Runnable对象到主线程中,每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),
它有两个作用:
(1)安排消息或Runnable在某个主线程中某个地方执行
(2)安排一个动作在不同的线程中执行
Handler中分发消息的一些方法 :
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
sendMessage类方法,允许你安排一个带数据的Message对象到队列中,等待更新.
把这些必备的方法搞明白基本上也就再注意一些细节,handeler就搞明白了。
最后再总结一下几点:
1、向哪个Handler发送消息,就必须在哪个handler里面接收;
2、直接使用JAVA的 Thread是无法更新Android UI的,因为Android View在设计的时线程是不完全的,不过Android提供了几种供开发者在线程中更新UI的方法,如下:
runOnUiThread( Runnable )
post( Runnable )
postDelayed( Runnable, long )
3、直接使用hanlder.post等方法是在当前主线程里面做操作,而不是另外新建线程,建议使用Thread线程直接新建另外一个线程或者使用HandlerThread类也可以。(这句话的意思是ui线程是主线程,把一些耗时的操作放入其他线程做,主线程仅仅更新视图)
4、记住消息队列的先进先出原则。
- Handler机制的简单原理
- Handler机制的简单原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- handler机制的原理
- Handler机制的原理
- handler机制的原理
- Locust的API介绍-----HttpSession类和Response类
- hadoop基础
- 界面编程-写一个滑动条
- vue之组件 slot内容分发
- C++封装DLL,导出一个类
- Handler机制的简单原理
- Ubuntu 下修改用户文件权限的方法
- Kotlin 设计模式-命令
- meta标签整理
- 子元素浮动后,两个子元素高度不一样,父元素自适应高度,子元素自适应为相同高度
- 手把手教你写二叉查找树Binary Search Tree(1)
- iOS11人机交互指南-01 iPhone X概览
- 身份认证加salt
- Activity的四种启动模式讲解