首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

花样使用Handler源码分析

Handler在之前也说到过他的使用以及源码分析,而且相信大家都知道如何使用它,最常见的使用方法恐怕就是下面这种了: Handler handler = new Handler(){ @Override...而对于上面这个Handler对象,如果他是主线程中的,那么我们子线程中需要拿到主线程的这个Handler对象。...final Handler handler = new Handler(){ @Override public void handleMessage(Message msg) {...这种情况下想要拿到主线程的Handler对象也不是不可以,方法还是有很多,把主线程的handler写成static、创建类继承Handler并且序列化,然后通过intent传入…..可能还有其他的一些方法...= null) {//msg中的callback,这个是通过post方法自己封装的msg(自行查源码),优先级是最高的 handleCallback(msg); } else {//

25850

源码分析|Handler内存泄漏分析及解决

一、介绍 首先,请浏览下面这段handler代码: public class SampleActivity extends Activity { private final Handler...那么,handler是如何造成内存泄漏的呢? 二、分析 1、 Android角度 当Android应用程序启动时,framework会为该应用程序的主线程创建一个Looper对象。...而且,由上文可知,这条消息持有对handler的引用,而handler又持有对其外部类(在这里,即SampleActivity)的潜在引用。...四、泄露解决方案 首先,上面已经明确了内存泄漏来源: 只要有未处理的消息,那么消息会引用handler,非静态的handler又会引用外部类,即Activity,导致Activity无法被回收,造成泄漏...另外,如果想要在handler内部去调用所在的外部类Activity,那么可以在handler内部使用弱引用的方式指向所在Activity,这样统一不会导致内存泄漏。

61610

Android 源码分析 —— Handler、Looper 和 MessageQueue

书接上文,在分析 Toast 源码的过程中我们涉及到了 Handler,这个在 Android 开发里经常用到的类——线程切换、顺序执行、延时执行等等逻辑里往往少不了它的身影,跟它一起搭配使用的通常是...提出问题 根据以上印象,及以前的使用经验,提出以下问题来继续本次源码分析之旅: Thread 与 Looper,Looper 与 MessageQueue,Handler 与 Looper 之间的数量对应关系是怎样的...Handler 与 Looper 在前面略读 Looper 源码的过程中,我发现 Handler 基本没有出场,那么现在,从构造 Handler 的方法开始分析。...在 Handler 源码里能找到答案,这里就以 Handler.post(Runnable) 方法为例,其它几个 postXXX 方法情形与此类似。...遗留知识点 ThreadLocal 应用的启动流程 本篇用到的源码分析方法 文档优先 后话 关于 Handler、Looper 和 MessageQueue 的分析在此先告一段落,这部分的内容比较容易分析

33720

Android 源码分析 —— Handler、Looper 和 MessageQueue

分析 Toast 源码的过程中我们涉及到了 Handler,这个在 Android 开发里经常用到的类——线程切换、顺序执行、延时执行等等逻辑里往往少不了它的身影,跟它一起搭配使用的通常是 Runnable...提出问题 根据以上印象,及以前的使用经验,提出以下问题来继续本次源码分析之旅: Thread 与 Looper,Looper 与 MessageQueue,Handler 与 Looper 之间的数量对应关系是怎样的...Handler 与 Looper 在前面略读 Looper 源码的过程中,我发现 Handler 基本没有出场,那么现在,从构造 Handler 的方法开始分析。...在 Handler 源码里能找到答案,这里就以 Handler.post(Runnable) 方法为例,其它几个 postXXX 方法情形与此类似。...遗留知识点 ThreadLocal 应用的启动流程 本篇用到的源码分析方法 文档优先 后话 关于 Handler、Looper 和 MessageQueue 的分析在此先告一段落,这部分的内容比较容易分析

59120

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

前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将手把手带你深入分析 Handler机制的源码,希望你们会喜欢 ---- 目录 ? ---- 1....源码分析 下面的源码分析将根据 Handler的使用步骤进行 Handler使用方式 因发送消息到消息队列的方式不同而不同,共分为2种:使用Handler.sendMessage()、使用Handler.post...) // 多线程可采用AsyncTask、继承Thread类、实现Runnable 源码分析 下面,我将根据上述每个步骤进行源码分析 步骤1:在主线程中 通过匿名内部类 创建Handler类对象...) // 多线程可采用AsyncTask、继承Thread类、实现Runnable 源码分析 下面,我将根据上述每个步骤进行源码分析 实际上,该方式与方式1中的Handler.sendMessage...至此,关于Handler机制的源码全部分析完毕。 ---- 5. 总结 本文详细分析Handler机制的源码,文字总结 & 流程图如下: ? ? ? ?

1.1K20

安卓handler源码(androidstudio源码)

那到底是怎么样的呢,现在就跟随Android的源码来看看他的工作原理是什么样的。...只不过HandleThread已经把这些做好了,还封装了优先级设置,安全退出等一些辅助功能,让我们开发人员使用起来更加方便】 handler我们知道可以用来线程间通信,之前在Handler工作流程梳理里面分析过...源码分析 看了上面的理解描述后,我们就可以猜到HandleThread代码逻辑应该不复杂,代码量也不会很大。事实就是这样,加上注解,HandleThread的代码在160多行。...这就之前分析handler看到的线程最后的状态是一毛一样,那就是随后线程都会进入到loop循环中。 以上就是HandleThread的主要原理了。...有一点肯定的,源码中这么玩肯定是没错的,我需要一个可以让自己信服的理由。

41830

Android--源码分析Handler巧妙的观察者模式及手写简单实现Handler

对我们来说,Hanlder机制只是安卓SDK封装了一个线程通信的工具罢了,它通过生产者消费者模式处理了多线程同步,当然了它封装的功能很强大 网上关于Handler源码分析已经有很多了,自己看了源码后,...也想做个总结,今天利用时序图和流程图来做一个简单分析,尽量使用简洁易懂的方式来帮助理解 一、Handler源码分析 1.Looper创建及启动轮询 Java程序的入口为main函数,每个App都是一个单独的...发送消息与接收消息 我们常常会在Activity中定义一个Handler成员变量(实际上不推荐直接new Handler(),容易内存泄漏),并重写handleMessage方法来接收消息,接下来分析Handler...源码 2.1 Handler空构造 空构造函数如下,Activity中是主线程,所以 Looper.myLooper()返回的就是主线程创建的Looper: @Deprecated public...发送消息与接收消息时序图 在上面的时序图中,增加Handler发送和接收消息,有些调用链就简略掉了: Handler机制 我们目前只争对主线程进行了分析,但不难理解的是,Handler机制除了主线程外

44820

android 开发Handler源码剖析

Android的消息机制主要是Handler的运行机制,而讲Handler的机制,又需要和MessageQueue和Looper结合。...Handler的使用: Handler 主要有两种用法:( 1 )调度消息和 runnable 对象,并在某一时间点执行。( 2 )依次存放分属不同线程的行为。...(1630): main,可以发现我们创建了一个名为“thread”的线程,病通过handler发送消息,我们创建的handler自动和UI线程的Looper关联上了。...那么,可不可以在主线程中定义handler,在代码中动态改变handler使之与其他线程的looper相关联呢?是可以的。...分析完了Android消息机制的流程,那么我们接下来分别理解一些重要的概念。主要从以下几个方面增强理解,Handler,MessageQueue,Looper和Threadloacal.

52170
领券