[转]
Android中的handler类是它特有的用于管理线程的工具类,方便于线程间通讯.
每一个应用程序(apk),都是一个单独的进程,运行于单独的Dalvik虚拟机实例中,再运行于单独的Linux进程中。每一个进程默认只有一个线程即UI主线程,因为它是以UI界面更新为主要任务的主线程,所以得名。
同样继承于Context的Activity和Service都是跑在同一个线程里的,即UI主线程。这样他们之间是相互阻塞的,当Service运行较为费时的工作,而Activity上的UI界面需要更新导致程序卡住时,就会导致程序被系统Kill掉。解决办法是Service需要开用更多的线程来运行费时的工作,例如:播放音乐,网络下载等。
那么开辟的线程怎样与UI主线程互相协调工作呢,这就得需要用到Handler了。这个谷歌煞费苦心的发明确实有神奇的作用。最主要的作用是管理线程间的消息通讯。
UI主线程里初始化时自带一个消息队列(MessageQueen),需要用Looper进行管理。Looper的主要作用是循环迭代MessageQueen,加入新的Message,轮到这条消息时再发送出去。而Handler就可以直接操作Looper了,例如:
Handler mHandler = new Handler(Looper.getMainLooper);就是用mHandler对象控制UI主线程的Looper对象,也就是控制了MessageQueen。而:
Handler mHandler = new Handler(Looper.myLooper);就是控制当前线程(也可能是UI主线程)的MessageQueen。
那么Handler控制了各个线程的MessageQueen就可以实现,主线程与子线程的相互通信,传递消息队列,分派任务等复杂的工作了。具体可参见高焕堂的Android的MessageQueen一文。
Handler还有一个用处,就是缓和任务冲突。当UI急需更新但是任务却在繁忙状态时,为了避免被系统杀死,这时最好利用Handler发送简单消息通知UI主线程更新界面,UI主线程在运行时会在空闲时取出消息解析运行,这样就不会造成任务冲突了。但是这样也可能会造成界面看起来一卡一卡的,最好的办法还是开辟一个新的线程来分摊工作。
有些没有界面的任务比如Service运行时需要更新UI界面,例如弹出对话框(Dialog),那就得通过Handler来发送消息,通知UI线程更新界面,这样才能弹出对话框。
分享到:
相关推荐
【Android_Handler01-...总之,`Android_Handler01-源码`项目提供了一个学习和实践Handler机制的平台,通过深入研究源码,开发者能够掌握Android中复杂的线程通信机制,这对于编写高效、稳定的Android应用至关重要。
这个压缩包"安卓Android源码——HandlerMessage3.rar"很可能包含了关于这三者如何协同工作的示例代码或者详细分析。现在,我们将深入探讨这些概念及其在Android系统中的作用。 `Handler` 是一个用于发送和处理消息...
本资料“Android应用源码之HandlerLooper1.zip”应该是包含了一个关于这些组件的详细示例或分析,让我们来深入探讨它们的工作原理。 首先,`Handler`是Android中的一个类,它用于在UI线程中发送和处理消息。当你...
**Android底层架构研究** 在深入探索Android底层架构之前,我们首先需要理解其核心构成与运作原理。Android系统作为全球最广泛使用的移动操作系统之一,其底层架构的复杂性和精妙性是确保其稳定性和高效性的基石。 ...
《Android核心机制深入分析》是针对Android系统内部工作原理的一篇详尽研究,旨在帮助开发者深化对Android系统核心机制的理解。这份PDF文档由TerryLog的分析整理而成,涵盖了Android的多个关键层面,包括但不限于...
【标题】中的“android2.2.3里面的...对于开发者来说,深入研究这个源码可以帮助提升对Android中Handler机制的理解,以及Java编程的实践经验。同时,如果包含JavaFX相关内容,还可以扩展到跨平台应用开发的知识。
6. **异步处理**:由于网络操作不应阻塞UI线程,开发者需要掌握Android的AsyncTask、Handler、Looper或使用现代的Kotlin协程来实现后台任务。 7. **RecyclerView**:显示电影列表时,通常会使用RecyclerView,这是...
其次,Android音频输入主要依赖于AudioRecord类,它可以捕获设备麦克风的原始音频数据。开发者需要设置正确的音频格式(如采样率、位深度、声道数)并创建一个缓冲区来存储实时音频流。在源码中,这部分可能涉及设置...
通过深入研究这个项目,开发者不仅可以掌握Android应用开发的基本流程,还能进一步提升在网络请求、数据解析和UI设计等方面的专业技能,为后续的Android开发工作打下坚实基础。同时,这样的实战经验也有助于培养解决...
《Android核心分析》系列文档全面地探讨了Android操作...以上是《Android核心分析》系列文档的主要知识点概览,这些内容对于Android开发者、系统优化人员和研究者来说,都是理解和优化Android系统不可或缺的基础知识。
AndroidApp定位和规避内存泄露方法研究.docx文档很可能详细阐述了以下几种常见的内存泄露类型及其解决方案: 1. 单例模式:单例类中的静态成员变量可能会持有对Activity的引用,使得Activity无法正常销毁。解决方法...
《Android ---snake源代码分析》 在Android开发领域,深入...在阅读《android--snake分析.doc》文档时,建议配合源代码一起研究,对照文档中的解释逐步理解和模仿实现,相信你会对Android游戏开发有更深的理解和感悟。
5.4.2 Handler分析 124 5.4.3 Looper和Handler的同步关系 127 5.4.4 HandlerThread介绍 129 5.5 本章小结 129 第6章 深入理解Binder 130 6.1 概述 131 6.2 庖丁解MediaServer 132 6.2.1 MediaServer的入口...
这些源码可能涵盖了不同的功能模块,如用户界面(UI)设计、数据存储(SQLite或SharedPreferences)、网络通信(如使用Retrofit或Volley库)、多线程处理(AsyncTask或Handler)、以及服务(Service)和广播接收器...
- **Android Framework层**:深入研究Intent、View、Activity等组件的工作原理,有助于优化应用性能和解决兼容性问题。 - **Android应用编译过程**:理解AOSP(Android Open Source Project)构建流程,包括AAPT...
9. **框架与库分析**:诸如Dagger、ButterKnife、Retrofit等流行的Android开发框架和库,其内部实现原理值得深入研究。分析这些库的源码,能提升开发者对依赖注入、网络请求、注解等高级概念的理解。 10. **性能...
在Android开发中,`Handler`是一个至关重要的组件,它用于在主线程中处理来自其他线程的消息,确保UI...通过研究这个示例,开发者能够更深入地理解Android的消息传递机制,从而在自己的项目中更加熟练地使用`Handler`。
Android的AsyncTask、Handler、Thread和IntentService等机制在源码中广泛应用。例如,`LoadMessagesTask`用于在后台加载邮件,`SyncService`负责同步邮件账户。 5. **网络通信**: Email应用使用Java的Socket编程...
在Android开发领域,经典代码例子是开发者学习和提升技能的重要资源。...在压缩包中的"例子"可能包含了这些知识点的具体实现,通过分析和学习这些代码,开发者可以更好地理解和掌握Android开发技术。
Android提供了AsyncTask、IntentService或Handler/Looper机制来实现后台处理。现代Android推荐使用Kotlin协程,它提供了一种更简洁、易于理解和管理的方式处理异步任务。 6. **UI更新**:当后台任务完成,需要更新...