学习
实践
活动
专区
工具
TVP
写文章

浅谈 Android Handler

handler是什么? handlerAndroid提供用来更新UI的一套消息机制,也是一套消息处理的机制(发送和处理消息) handler原理 handler负责消息发送,looper负责接收handler发送过来的消息, image.gif 获得当前的looper对象,通过looper拿到MessageQueue,就完成了handler和looper之间的关联 下面继续看handler的消息发送 public boolean image.gif 插入消息之前就指定消息发送给谁(msg.target),默认情况下发送给自己的handler,然后把消息放入队列中,handler就完成了发送message到MessageQueue 总结 handlerAndroid中扮演的非常重要的角色,熟悉handler的原理,不仅在面试的时候有用,就连activity的生命周期也是通过handler发送消息,详细请看源码

42220

AndroidHandler 使用

---- 【AndroidHandler 使用 0x1 前言 Android中的消息机制是通过Handler来实现的。 随着EventBus和RxJava等依托观察者模式的消息传递机制的出现,当前在Android开发中Handler的使用已经不如之前那么重要,但是Android系统所提供的Handler中的各种编程思路和设计方案 0x11 Handler是什么 HandlerAndroid给我们提供用于更新UI的一套机制,也是一套消息处理机制。用它可以发送消息,也可以用它处理消息。在Android开发中有着非常重要的地位。 Android在设计的过程中,就封装了一套消息创建、传递、处理的机制。如果不遵循这样的机制,是没有办法更新UI信息的,会抛出异常信息。 使用Handler就是其中一种办法。 0x13 Handler的作用 根据Android Developer网站上的描述,Handler主要有两个用途。

12120
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android Handler机制学习

    简介:Handler是一套在 Android开发中 进行异步消息传递的机制 为什么要用Handler: 因为屏幕的刷新频率是60Hz,大概16毫秒会刷新一次,所以为了保证UI的流畅性,耗时操作需要在子线程中处理 因此需要Handler在子线程发消息给主线程来更新UI。 Android中的UI控件不是线程安全的,因此在多线程并发访问UI的时候会导致UI控件处于不可预期的状态。 Handler 的好处: 在多个线程并发更新UI的同时 保证线程安全。 概述一下Android中的消息机制? Android中的消息机制主要是指Handler的运行机制。 Handler运作方式: 网上看到一个对Handler机制的比喻我觉得不错: Handler:快递员(属于某个快递公司的职员) Message:包裹(可以放置很多东西的箱子) MessageQueue Handler 简单说Handler用于同一个进程的线程间通信。

    49510

    android Handler更新UI

    android中经常需要更新界面某个元素的值,但是在主线程中是不可以直接更新主线程的值。这里推荐通过handler机制来更新值。 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button, Android会分发事件到Button 如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到Android 这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受子线程传过来的(

    92570

    Android-Handler机制

    UI的方式了,如:子线程获取数据通过Handler.sendMessage()发送消息,在UI线程Handler.handleMessage()就会调用,执行相应处理,同时Handler机制也是我们面试常问到的内容 Handler Handler可以发送什么 handler有两个工作,一是发送任务或者消息;二是处理消息或者执行任务。 创建Handler handler和looper的创建并不是ui线程独有的。任何一个普通的线程,都可以创建自己的looper,创建自己的handler。 如果handler是发送了一个message到MessageQueue,那么又细分为2种情况 handler创建时设置了callback, 即handler = new Handler(callback ); handler创建时未设置callback,即handler = new Handler(); 如果设置了callback,那么message会先被callback处理。

    54920

    Android Handler异步通信:深入详解Handler机制源码

    前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将手把手带你深入分析 Handler机制的源码,希望你们会喜欢 ---- 目录 ? ---- 1. Handler 机制简介 定义 一套 Android 消息传递机制 作用 在多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理 若还不了解,请务必阅读文章:Android:这是一份Handler消息传递机制 的使用教程 2.3 工作原理 理解Handler机制的工作原理,能很大程序帮助理解其源码 具体请看文章:Android () 若还不了解,请务必阅读文章:Android:这是一份Handler消息传递机制 的使用教程 下面的源码分析将依据上述2种使用方式进行 方式1:使用 Handler.sendMessage 下面我将继续深入讲解 Android中的Handler异步通信传递机制的相关知识,如 工作机制流程、源码解析等,有兴趣可以继续关注Carson_Ho的安卓开发笔记 ---- 请帮顶 / 评论点赞!

    68720

    Android Handler机制:Looper、Handler、MessageQueue、Message的关系

    一、概述 HandlerAndroid中处理异步消息的机制。 为此Android把UI界面上单击按钮的事件封装成了一个Message,将其放入到MessageQueue里面去,即将单击按钮事件的Message入栈到消息队列中,然后再将广播事件的封装成以Message 二、Handler详解 (一)构造函数 使用Handler之前,我们都是初始化一个实例,比如用于更新UI线程,我们会在声明的时候直接初始化,或者在onCreate中初始化Handler实例。 方法,也就是说为了使得Handler能够处理Message,我们有两种办法: (1)向Hanlder的构造函数传入一个Handler.Callback对象,并实现Handler.Callback的handleMessage private Handler mHandler = new Handler(){ public void handleMessage(android.os.Message msg){

    25140

    Android 谈谈 Handler 那些事一、Handler是什么

    是什么 HandlerAndroid 中引入的一种让开发者参与处理线程中消息循环的机制,Handler直接继承自 Object,每个 Handler 都关联了一个线程,每个线程内部都维护了一个消息队列 ,除此之外,Handler 还可以做其他很多的事情,Handler 是 Thread 的代言人,是多线程之间通信的桥梁,通过 Handler,我们可以在一个线程中控制另一个线程去做某些事 二、Handler } }; 而对于复杂的数据类型,如一个对象的传递就要相对复杂一些,在 Bundle 中提供了两个方法,专门用来传递对象的,但是这两个方法也有相应的限制,需要实现特定的接口,当然,一些 Android Object obj 传递一个任意的对象 Messaenger replyTo 是作为线程通信的时候使用 int what 定义的消息码,一般用于设定消息的标志,辨别究竟是从哪里中发来的消息 参考: AndroidHandler 的使用 Android -- 多线程之 Handler

    18010

    androidhandler用法总结

    比如可以用handler发送一个message,然后在handler的线程中来接收、处理该消息,以避免直接在UI主线程中处理事务导致影响UI主线程的其他处理工作,Android提供了Handler作为主线程和子线程的纽带 通常情况下,当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发。 如果此时需要一个耗时的操作,例如:联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完成的话,会收到AndroidAndroid中,对于UI的操作通常需要放在主线程中进行操作。 另外,Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。

    78890

    Android 异步操作】手写 Handler ( Handler 发送与处理消息 | Handler 初始化 | 完整 Handler 代码 )

    文章目录 一、Handler 发送与处理消息 ( 两大功能 ) 二、Handler 初始化 三、完整 Handler 代码 一、Handler 发送与处理消息 ( 两大功能 ) ---- Handler 初始化 ---- Handler 初始化 : Handler 的功能一 发送消息 , 就是向 消息队列 MessageQueue 中发送消息 , 并将消息放到 MessageQueue 中的 Message 中获取对应的消息队列 ; 这里就需要特别注意 , 在初始化 Handler 时 , 需要用到 Looper , 如果 Looper 为空 , Handler 初始化就会失败 ; 因此在 创建 Handler Handler 的操作就是将 Message 放入 MessageQueue 因此在 Handler 中需要持有 MessageQueue 消息队列的引用 代码 ---- package kim.hsl.handler; public class Handler { /** * 消息队列 * 该消息队列封装在 Looper

    2100

    Android 异步操作】手写 Handler ( 总结 | Message | MessageQueue | Looper | Handler ) ★

    ---- 模仿 Android 中的 Message 基本功能 , 提供 what 与 obj 变量 , 提供一个回收方法 ; 此外 , 还要指明下一个消息 , 以及是哪个 Handler 发送的该消息 = null; next = null; target = null; } } 二、Handler 消息处理者 ---- Handler 有两个功能 : 功能一 ; 这里就需要特别注意 , 在初始化 Handler 时 , 需要用到 Looper , 如果 Looper 为空 , Handler 初始化就会失败 ; 因此在 创建 Handler 之前 , 必须先调用 Handler 的操作就是将 Message 放入 MessageQueue 因此在 Handler 中需要持有 MessageQueue 消息队列的引用 代码 : package kim.hsl.handler; public class Handler { /** * 消息队列 * 该消息队列封装在 Looper 中

    1200

    Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )

    文章目录 一、主线程中的 Handler 与 Looper 二、Handler 原理简介 一、主线程中的 Handler 与 Looper ---- Android 系统中 , 点击图标启动一个应用进程 就是从 Linux 的 Zygote 进程 fork 一个子进程 , 之后该子进程就会创建 ActivityThread , 执行其中的 main 函数 , 该 main 函数就是应用的主线程 ; Android /9.0.0_r8/xref/frameworks/base/core/java/android/app/ActivityThread.java 二、Handler 原理简介 ---- Handler 消息队列 ( MessageQueue ) 中 , Looper 中维护了一个 消息队列 ( MessageQueue ) , MessageQueue 封装在 Looper 中 ; 更多细节参考 : 【AndroidHandler 机制 ( Handler | Message | Looper | MessageQueue )

    700

    Android Handler实现原理探索

    Android Handler我们都很熟,也经常也用它,一般可以用Handler发送一个消息Message,或者Post一个Runnable对象,而且都可以给它们加上延时,如果操作的Handler 创建UI线程Looper     其实上面的问题很好想通,我们知道App都有一个UI线程,也叫主线程,那是Android框架帮我们创建的,那么框架肯定在初始化UI线程时,做了很多事情,其中肯定包括调用了 Looper.prepareMainLooper()方法,prepareMainLooper方法注释里面其实已经说的很清楚了,Android环境帮我们做了所有的事,我们只用坐享其成。     在调用完Looper.prepare()后,还需要调用Looper.loop()来启动循环,当然主线程的Looper也是Android环境帮我们调用了,我们还是只用坐享其成,我们来看下loop方法的实现代码 Android框架还提供了一个HandlerThread类,其实就是在Thread内部帮我们维护好了一个Handler,大家有兴趣可以去看下这个类的源码,其实也就是Handler的一些知识,很简单~

    46020

    扫码关注腾讯云开发者

    领取腾讯云代金券