`

Handler理解

 
阅读更多
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 handler理解

    ### Android Handler机制详解 #### 一、Handler的基本概念与作用 **Handler** 是Android开发中一个非常重要的组件,主要用于在不同线程之间传递消息。它主要用于解决子线程与主线程之间的通信问题,使得子线程能够...

    理解handler,message,Android简单时钟程序

    在Android开发中,`Handler`、`Message`和线程管理是至关重要的概念,尤其是在创建实时更新的应用,如时钟程序时。让我们深入探讨这些概念,并通过一个简单的时钟程序来理解它们的工作原理。 首先,我们需要了解...

    android 中Handler 的几种写法

    通过理解以上知识点,开发者可以灵活地在Android应用中使用`Handler`进行线程间通信,高效地处理异步任务和UI更新。在实际开发中,结合`Handler`、`Looper`、`Thread`以及`Runnable`,可以构建出复杂而稳定的多线程...

    Fragment与Activity使用Handler进行交互

    在Android应用开发中,Fragment和...正确理解和使用Handler能帮助开发者构建高效、稳定的Android应用程序。在实际开发中,还应结合其他通信方式,如Interface回调、EventBus、LiveData等,根据场景选择最适合的方法。

    手写一套Java的Handler程序,深入理解Android消息机制

    本文将通过手写一套Java的Handler程序,深入探讨Android的消息处理流程,帮助开发者更好地理解和运用这一机制。 首先,我们需要了解Handler的作用。Handler主要负责发送和处理Message对象,它通常在主线程(UI线程...

    Handler的深入理解

    ### 深入理解Android Handler #### 一、概述 Android 的消息处理机制是应用程序能够高效地进行异步操作和用户界面更新的关键所在。在这个机制中,有几个核心组件需要掌握:`Message`、`MessageQueue`、`Handler`、...

    jobHandler调度器

    "JobHandler调度器"是一种广泛应用于分布式任务调度的框架,主要设计用于处理大规模并发和定时任务的场景。在这个系统中,Job...结合提供的资源和实际的项目经验,开发者可以更好地理解和利用这一强大的调度框架。

    handler用法

    理解并熟练使用Handler是每个Android开发者必备的技能之一。本篇文章将详细讲解Handler的基本概念、工作原理以及如何在实际项目中应用。 首先,Handler的核心作用是在不同的线程间传递消息(Message)并执行相应的...

    handler的简单示例

    在Android开发中,...正确理解和使用Handler能帮助开发者有效地管理应用程序的多线程行为,避免阻塞主线程,提升用户体验。通过实践和学习更多关于Handler的知识,开发者可以更好地掌握Android应用的异步编程技巧。

    Handlerjava代码实现

    通过学习和分析这些代码,你可以更好地理解`Handler`的工作原理和使用方式,从而在自己的项目中灵活运用这一强大的工具。记住,合理利用`Handler`可以有效避免ANR(Application Not Responding)错误,提升应用的...

    安卓handler的使用

    在Android应用开发中,Handler是一种重要的线程通信机制,它与Looper、Message紧密配合,用于在不同的线程间传递消息,解决多线程...在AndroidHandler这个项目中,你可以找到相关的代码示例,加深对Handler机制的理解。

    Handler 推荐用法 demo

    本`Handler`推荐用法的示例,旨在帮助开发者理解和掌握如何有效地使用`Handler`来管理应用程序的异步任务和更新UI。 `Handler`的基本原理是基于消息队列(Message Queue)和Looper的机制。它由三部分组成:`Handler...

    一个activity中多个handler和消息的处理过程

    在Android应用开发中,...理解Handler、Looper和Message之间的关系对于优化Android应用的性能和避免潜在问题至关重要。在实际开发中,合理地设计和管理Handler,可以有效地提高代码的可维护性和应用的用户体验。

    详解Android中Handler的内部实现原理

    Handler是Android系统中用于线程间通信的关键组件,它的内部实现原理涉及到...在编程实践中,深入理解Handler、Looper和MessageQueue之间的关系,以及它们如何协同工作,对于编写高效且稳定的Android应用至关重要。

    Handler,Looper和Message

    在Android开发中,`Handler`、`Looper`和`Message`是实现线程间通信的重要组件,它们共同构建了一个消息处理机制。理解这三个概念对于优化应用程序的性能和用户体验至关重要。 `Handler`(处理器)是Android中的一...

    android handler 机制 源码

    理解Handler、Looper和Message的源码对于开发高效、稳定的Android应用至关重要。通过深入学习这些核心组件,开发者能够更好地处理多线程间的通信,避免ANR,提高应用程序的响应速度和用户体验。在实际编程中,可以...

    安卓Handler的Demo

    在Android开发中,`Handler`是一个至关重要的组件,它用于处理与UI线程交互的异步消息。在Android系统中,主线程(也称为UI线程)负责处理...理解并熟练运用`Handler`,对于提升Android应用的性能和用户体验至关重要。

    Activity中的多个Handler处理机制

    在Android应用开发中,`Activity`是用户界面的主要载体,而`Handler`是Android系统中用于线程间通信的关键组件。当我们需要在一个`Activity`中处理...理解和掌握这些知识点对于提升Android应用的性能和稳定性至关重要。

    Android_Handler消息处理机制

    这个Demo是理解Handler消息处理机制的一个很好的实践案例。 总结起来,Android的Handler消息处理机制是实现线程间通信和异步任务处理的核心工具,它确保了对UI的修改总是在正确的线程(主线程)中进行,避免了因不...

    handler post的方法demo

    首先,我们来理解`Handler`。在Android中,主线程(UI线程)负责处理用户交互,而长时间运行的任务(如网络请求或数据库操作)应放在其他线程中执行,以免阻塞UI。`Handler`就是连接这两种线程的桥梁。创建`Handler`...

Global site tag (gtag.js) - Google Analytics