写在前面的话:本系列主要是学习sundy的Android深入浅出视频中的一些记录,心得。方便自己以后查阅。也供大家查看。欢迎交流,补充。
一般作为面试题(有些有答案,有些没有。问题一般从sundy老师思维导图中摘录,答案并非唯一标准,仅供参考):
1、使用Handler是异步的,它会建立新线程么?
不会
2、Handler是在主线程内么?
一般情况下,handler是在主线程内,不过我们也可以控制在当前线程内,比如传入的loop是当前线程的。
3、Handler的post 和 sentMessage方法,使用的是一个队列还是两个?
使用的是一个队列,查看Handler的实现源代码,就会发现post和sentMessage调用的是同一个方法。
4、子线程中建立一个handler,然后sendMessage会怎样?
会抛异常,但是如果在子线程中实例化loop,则正常
5、子线程建立handler , 构造的时候可以传入主线程的Looper 吗?
可以
6、当前线程中有一个Looper这样的循环在监听消息队列,但又不是额外的线程,这不是和我们学习的常理相悖么?
不相悖,Looper是由系统来控制的
7、Handler是什么,作用以及为什么要引入Handler的概念?
Hanlder作用:
1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器
2)线程间通信。在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。
角色描述:
1)Looper:(相当于隧道) 一个线程可以产生一个Looper 对象,由它来管理此线程里的Message Queue( 车队,消息隧道) 。
2)Handler: 你可以构造Handler 对象来与Looper 沟通,以便push 新消息到Message Queue 里;或者接收Looper( 从Message Queue 取出) 所送来的消息。
3) Message Queue( 消息队列): 用来存放线程放入的消息。
4 )线程:UI thread 通常就是main thread ,而Android 启动程序时会替它建立一个Message Queue 。
每一个线程里可含有一个Looper 对象以及一个MessageQueue 数据结构。在你的应用程序里,可以定义Handler 的子类别来接收Looper 所送出的消息。
8、主线程就一个消息队列,为什么不同Handler实例之间不能共享消息?
以内message有一个属性what target是一个标志(这里sundy已经说明这里课程里讲错了,应该是 target 属性)
9、Handler1.sendMessage, Handler2能接收么?
不可以,答案同8
------下面是一些总结------
1、Handler实例与消息处理是关联的,发送和接收要匹配---handle1发送的数据,要由handle1来接收
2、Handler操作队列,主要是在子线程操作主线程消息队列---最常见的就是在子线程中更新UI界面
3、子线程默认是没有消息队列的---但是我们可以使用HandleThread,那么子线程就会有自己的消息队列
分享到:
相关推荐
《Sundy深入浅出部分源码Android》是一个关于Android源码解析的学习资源,旨在帮助开发者更深入地理解Android系统的运行机制。在这个专题中,Sundy将带领我们逐步探索Android的内部工作原理,通过分析关键源码,提升...
hive-hbase-handler-1.2.1.jar解决hive1.2.1,hbase不兼容情况!
【标题】"sundy深入浅出部分源码 、android" 涉及的知识点主要集中在Android开发和源码分析两个领域,Sundy大师的教程是这个主题的关键资源。在这个教程中,Sundy可能深入讲解了Android应用开发的核心概念和技术,...
赠送jar包:netty-handler-4.1.68.Final.jar; 赠送原API文档:netty-handler-4.1.68.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.68.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.68....
赠送jar包:netty-handler-4.1.23.Final.jar; 赠送原API文档:netty-handler-4.1.23.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.23.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.23....
赠送jar包:netty-handler-4.1.16.Final.jar; 赠送原API文档:netty-handler-4.1.16.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.16.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.16....
赠送jar包:netty-handler-4.1.11.Final.jar; 赠送原API文档:netty-handler-4.1.11.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.11.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.11....
总之,Handler消息机制是Android中实现线程间通信和异步加载的关键技术,理解其工作原理并熟练运用,对于提升应用性能和用户体验至关重要。结合其他异步处理技术,开发者可以构建出更加健壮、高效的Android应用。
Handler、Looper和Message是Android系统提供的一套用于在不同线程之间传递消息和进行同步的关键组件。本文将深入探讨如何自定义Handler、Looper来实现线程间的通信。 首先,我们了解下Handler的基本原理。Handler是...
SWT同样不允许主线程外的其他线程直接访问控件。 所以SWT为我们提供了async执行Runnable的方法。 但是该方法只是用于接收异步线程消息,如果你在该方法中做过多的事情同样会造成UI线程的阻塞。 因此,笔者模仿...
在Android应用开发中,线程间的交互是必不可少的,尤其是涉及到UI更新时。在这个主题下,我们将深入探讨Android中的异步任务(AsyncTask)、Binder、Handler以及迭代器模式。 首先,我们来理解Android中的异步任务...
HBase2.1.3整合Hive3.1.2,Hive官方的hive-hbase-handler-3.1.1.jar包不好用,自己编译后的,确认好用
通过HandlerDemo这个示例文件,你可以更深入地了解Handler的使用和异步更新的实际应用。在实际开发中,结合线程池、Future、RxJava等工具,可以进一步优化Handler的性能和代码结构。总之,熟练掌握Handler机制对于...
"前端开源库-rosid-handler-js.zip"是一个包含前端开发中使用的开源库,特别是与ROSID Handler相关的JavaScript库。ROSID Handler可能是用于处理特定任务,如数据管理、用户交互或性能优化的一个工具。由于标签部分...
在Android系统中,进程和线程是应用程序运行的基础,它们决定了程序如何管理和执行任务。深入理解这两个概念对于优化应用性能、提高用户体验至关重要。 首先,我们要明白什么是进程。在计算机科学中,进程是程序的...
在Android开发中,Handler、Looper和Message是实现线程间通信的重要组件,它们共同构成了Android的消息处理...同时,这也有助于提升我们的Android开发技能,尤其是在处理耗时操作和异步任务时,确保UI线程的流畅性。
### 超级Android深入浅出课程思维导图 sundy #### 一、思维导图概览 本思维导图由特级Android工程师sundy老师亲自制作,旨在帮助学习者全面掌握Android架构及其核心技术,从宏观到微观进行全方位剖析。 #### 二、...
本示例通过Handler和Thread的配合,实现了一个简单的网络图片异步加载功能。这里我们将深入探讨这两个组件的工作原理以及如何在实际项目中应用它们。 首先,我们了解下Android的线程模型。Android UI是单线程模型,...
Android进程和线程是Android应用程序运行的基础,理解这两个概念对于开发高质量的Android应用至关重要。在Android系统中,每个应用都是一个独立的Linux进程,这意味着它们在各自的沙箱环境中运行,互不影响,提高了...