雄安投资建设集团网站,如何仿网站模板,最好看免费视频,建设信用卡银行商城网站好吧好吧#xff0c;今天去面试的时候#xff0c;一个熊二般的面试官问我handler的机制#xff0c;以及和Looper的关系#xff0c;以及更新UI有哪些方式。可是我是小白啊#xff0c;所以不知道#xff0c;所以就不可能通过面试#xff0c;不过今年工作可真不好找。回来后…好吧好吧今天去面试的时候一个熊二般的面试官问我handler的机制以及和Looper的关系以及更新UI有哪些方式。可是我是小白啊所以不知道所以就不可能通过面试不过今年工作可真不好找。回来后又是把书籍又是看视频最终还是打算写成自己的博客。希望帮助到其他的小白。
下面我们通过六大模块来了解下handler相关内容有错误帮忙点出来谢谢大家。我的理解还很片面和浅薄
一、什么是handler
答handler是Android给我们提供用来更新UI的一套机制也是一套消息处理机制我们可以发消息也可以通过它 处理消息。
二、那为什么要用handler呢?我能不能不用
答我在网上搜了下给我的答案是肯定是不行的。因为android在设计的时候就封装了一套消息创建、传递、处理。如果不遵循就不能更新UI信息就会报出异常。
三、Android为什么要设计只能用handler机制更新UI呢
答最根本的目的就是为了解决多线程并发的问题
打个比方如果在一个activity中有多个线程并且没有加锁就会出现界面错乱的问题。但是如果对这些更新UI的操作都加锁处理又会导致性能下降。
处于对性能的问题考虑Android给我们提供这一套更新UI的机制我们只需要遵循这种机制就行了。不用再去关系多线程的问题所有的更新UI的操作都是在主线程的消息队列中去轮训的。
四、handler、Looper、MessageQueue的原理是什么
答大家都知道handler的作用有两个发送消息和处理消息。而handler发送的消息必须被送到指定MessageQueue消息队列中也就是说如果想让handler正常工作就必须有一个MessageQueue消息队列不过MessageQueue消息队列是由Looper来关系。所以也可以说想让handler正常工作必须在当前线程中有一个Looper对象。请认真读
1、来看一下Looper提供的构造器源码如图
你会发现该构造器用到的是private私有化告诉你的就是程序员你不能通过构造方法创建looper对象而在方法中Looper创建了一个与关联的MessageQueue这个MessageQueue就是用来管理Message(handler接收和处理的消息对象)
2、为了保证当前线程有Looper对象可以有两种情况处理。疯狂的Android讲义224页
1主ui线程启动系统就初始化了一个Looper对象只要在程序中直接创建handler即可然后用handler发送和处理消息。 2程序员自己创建的线程这个时候就要自己手动创建一个Looper对象了创建Looper对象调用它的prepare()。prepare()方法 是为了保证每个线程最多一个Looper对象。 prepare()方法 源码如图。
然后用Looper.loop)启动它。此时loop)方法就会使用一个死循环不断地取出MessageQueue中的消息并将消息分给所对应的Handler处理。
好吧总结一下吧
微笑Looper的作用每个线程只有一个Looper他负责管理MessageQueue会不断的从MessageQueue取出消息分发给对象 的handler
微笑MessageQueue的作用由Looper管理而MessageQueue则采用先进的方法来管理Message
微笑Handler的作用它把消息发送给Looper管理的MessageQueue并负责处理Looper分发给他的消息。
五、Android在子线程更新UI的最常见的五种方式 这里不讲解AsyncTask(异步任务)
1、runOnUiThread方法
2、handler.post方法 3、handler.sendMessage方法
4、view.post方法。 5、view postDelayed(Runnable,long)
前四种是慕课网老师讲解的最后一种是疯狂Android讲义书籍上有的一种。如果想要详细了解请点击链接点击打开链接慕课网讲的很详细希望帮助到大家。
六、非UI线程真的不能跟新UI吗
答对着这个问题我就开始百度、查书籍、最后看慕课网好吧终于得到答案答案就是有些时候是可以更新UI的在ViewRootImpl没有实例化的时候是不会check是否是主线程也就是说在非UI线程中是可以更新UI的。至于具体理论我把下面的视频地址给贴上以方便小伙伴更详细的了解。点击打开链接http://www.imooc.com/video/5726因为我自己没怎么看懂好丢脸尴尬
好吧对于Handler就说到这里吧可能讲的很笼统因为自己技术能力原因所以希望大家谅解也希望大家自己去看视频和书籍或者自己写个小程序加深印象。一边查一遍总结写了3个小时自己的能力还是太烂了哎