【Android】EventBus 源码解析】的更多相关文章

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40920453,本文出自:[张鸿洋的博客] 上一篇带大家初步了解了EventBus的使用方式,详见:Android EventBus实战 没听过你就out了,本篇博客将解析EventBus的源码,相信能够让大家深入理解该框架的实现,也能解决很多在使用中的疑问:为什么可以这么做?为什么这么做不好呢? 1.概述 一般使用EventBus的组件类,类似下面这种方式: public cl…
项目地址 :https://github.com/greenrobot/EventBus 这个项目个人感觉就是为了解决回调事件过多的,比方说A函数在做完以后 要调用b类的c函数,那我们通常的做法就是 定义一个接口 然后再A函数所属的类里面注册这个接口. 然后a函数做完以后 直接调用这个接口即可.但是这种方法写多了以后确实很麻烦,于是EventBus就是用来解决这种场景的. 和以往一样,我们只解析他的源码,如果你要学习他的用法请自行谷歌. 我们就从register函数开始说起. private s…
EventBus 源码解析 本文为 Android 开源项目实现原理解析 中 EventBus 部分项目地址:EventBus,分析的版本:ccc2771,Demo 地址:EventBus Demo分析者:Trinea,校对者:扔物线,校对状态:未完成 1. 功能介绍 1.1 EventBus EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递,这里的事件可以理解为消息,本文中统一称为事件.事件传递既可用于 Android 四大组件…
EventBus源码阅读记录 repo地址: greenrobot/EventBus EventBus的构造 双重加锁的单例. static volatile EventBus defaultInstance; public static EventBus getDefault() { if (defaultInstance == null) { synchronized (EventBus.class) { if (defaultInstance == null) { defaultInsta…
1,前段时间换工作的时候,关于AsyncTask源码这个点基本上大一点的公司都会问,所以今天就和大家一起来总结总结.本来早就想写这篇文章的,当时写<Android -- 从源码解析Handle+Looper+MessageQueue机制>的时候就是想为这篇文章做铺垫的,因为AsyncTask说里面还是使用的handle,所以先就写了handle这一篇.记得15年底去美团面试的时候,面试官就问我既然存在handle为什么google还要出AsyncTask(毕竟底层还是用的handle+Exec…
或许对于许多Android开发者来说,所谓的Android工程师的工作"不过就是用XML实现设计师的美术图,用JSON解析服务器的数据,再把数据显示到界面上"就好了,源码什么的,看也好不看也罢,反正应用层的开发用不上,再加上现在优秀的轮子越来越多,拿来主义泛滥,能用就是,反正老板也不关心是不是你自己写的,用我现在老大的话来说,阅读源码似乎只是一种"锦上添花"的事,有自然好,没有也罢. 说了这么多,到底有没有必要阅读源码?有必要,而且非常有必要!原因有三. 其一,了解…
1. 官方介绍 public abstract class AsyncTask extends Object  java.lang.Object    ↳ android.os.AsyncTask<Params, Progress, Result> AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish resul…
1,今天和大家一起从底层看看Handle的工作机制是什么样的,那么在引入之前我们先来了解Handle是用来干什么的 handler通俗一点讲就是用来在各个线程之间发送数据的处理对象.在任何线程中,只要获得了另一个线程的handler,则可以通过 handler.sendMessage(message)方法向那个线程发送数据.基于这个机制,我们在处理多线程的时候可以新建一个thread,这个thread拥有UI线程中的一个handler.当thread处理完一些耗时的操作后通过传递过来的handl…
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 好久没写博客了,最近忙着换工作,没时间写,工作刚定下来.稍后有时间会写一下换工作经历.接下来进入本篇主题,本来没想写LayoutInflater的,不过做项目的时候随手用了一下,运行发现了一些问题,稍微看了下源码,决定写篇博客当作记录一下吧. 一.LayoutInflater实例化方法(简单提一下) activity中我们习惯直接调用getLayoutInflater()方法: @NonNull public LayoutInflater g…
在上一章Handler源码解析文章中,我们知道App的主线程通过Handler机制完成了一个线程的消息循环.那么我们自己也可以新建一个线程,在线程里面创建一个Looper,完成消息循环,可以做一些定时的任务或者写日志的功能.这就是HandlerThread的作用 Android Handler消息机制源码解析 1 使用方法如下 在MainActivity中添加一个HandlerThread的变量,如下: public class MainActivity extends AppCompatAct…
以下针对 Android API 26 版本的源码进行分析. 在了解LruCache之前,最好对LinkedHashMap有初步的了解,LruCache的实现主要借助LinkedHashMap.LinkedHashMap的源码解析,可阅读Java--LinkedHashMap源码解析 概述   LruCahce其 Lru 是 Least Recently Used 的缩写,即最近最少使用,是包含对有限数量值的强引用的缓存.每当一个值被访问,它将被移到队尾.当缓存达到指定的数量时,位于队头的值将被…
一.概述 依旧是整理东西,所以近期的博客涉及的东西可能会比较老一点,会分析一些经典的框架,我觉得可能也是每个优秀的开发者必须掌握的东西:那么对于Disk Cache,DiskLruCache可以算佼佼者了,所以我们就来分析下其源码实现. 对于该库的使用,推荐老郭的blog Android DiskLruCache完全解析,硬盘缓存的最佳方案 如果你不是很了解用法,那么注意下面的几点描述,不然直接看源码分析可能雨里雾里的. 首先,这个框架会涉及到一个文件,叫做journal,这个文件中会存储每次读…
在自定义ViewGroup的过程中,如果涉及到View的拖动滑动,ViewDragHelper的使用应该是少不了的,它提供了一系列用于用户拖动子View的辅助方法和相关的状态记录,像Navigation Drawer的边缘滑动.QQ5.x的侧滑菜单.知乎里的页面滑动返回都可以由它实现,所以有必要完全掌握它的使用. 要想完全掌握ViewDragHelper的使用和原理,最好的办法就是读懂它的源码,所以就有了这篇分析,以便在印象模糊之时可以再次快速回顾ViewDragHelper的原理.用法.注意事…
用例 本文主要按照如下例子展开: //1. 新建bus对象,默认仅能在主线程上对消息进行调度 Bus bus = new Bus(); // maybe singleton //2. 新建类A(subscriber),answerAvailable()方法为事件回调,在主线程上运行 class A { public A() { bus.register(this); } // 可见性为public,仅有一个Event类型的参数 @Subscribe public void answerAvail…
https://github.com/simple-android-framework/android_design_patterns_analysis/tree/master/facade/elsdnwn 1. 模式介绍 模式的定义 外观模式(也成为门面模式)要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.它提供一个高层次的接口,使得子系统更易于使用. 模式的使用场景 在设计初期阶段,将不同的两个层分离: 在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式使用…
https://github.com/simple-android-framework/android_design_patterns_analysis/tree/master/builder/mr.simple 1. 模式介绍 模式的定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 模式的使用场景 相同的方法,不同的执行顺序,产生不同的事件结果时: 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时: 产品类非常复杂,或者产品类中的调用顺序不同…
模式介绍 模式的定义 将抽象部分与实现部分分离,使它们都可以独立的变化. 模式的使用场景 如果一个系统需要在构件的抽象化角色和具体化角色之间添加更多的灵活性,避免在两个层次之间建立静态的联系. 设计要求实现化角色的任何改变不应当影响客户端,或者实现化角色的改变对客户端是完全透明的. 需要跨越多个平台的图形和窗口系统上. 一个类存在两个独立变化的维度,且两个维度都需要进行扩展. UML类图 角色介绍 抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用. 修正抽象化…
大家都知道,要想在Intent里面传递一些非基本类型的数据,有两种方式,一种实现Parcelable,另一种是实现Serializable接口. 今天先不说Serializable 接口,只说Parcelable. 我们知道,Parcelable 只是一个接口,里面有几个关键方法: writeToParcel /** * Flatten this object in to a Parcel. * * @param dest The Parcel in which the object shoul…
转载:http://p.codekk.com/blogs/detail/54cfab086c4761e5001b2538 1. 功能介绍 1.1 EventBus EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递,这里的事件可以理解为消息,本文中统一称为事件.事件传递既可用于 Android 四大组件间通讯,也可以用户异步线程和主线程间通讯等等.传统的事件传递方式包括:Handler.BroadCastReceiver.Inter…
前言 在前面,我们探讨了如何在自己的代码中引入EventBus,进行基本的事件分发/监听:对注册观察者与事件发送的过程进行了浅析.从之前的学习中,我们了解到,EventBus一共有4种onEvent方法,要根据实际需求的不同选用不同的事件处理方法.本篇blog中,我们集中研究一下这四种事件处理方法内部分别做了什么事情,是如何实现的. 本篇会较多涉及java中的并发/多线程技术,这部分基础不够扎实的朋友,可以趁机黑练一下.(其实是说我自己 -_-!) post的最后一步 EventBus.post…
前情概要 上一篇blog我们了解了EventBus中register/unregister的过程,对EventBus如何实现观察者模式有了基本的认识.今天我们来看一下它是如何分发一个特定事件的,即post(Object event)方法. 本篇概述 EventBus中事件的分发与响应,post 方法. post 方法 public void post(Object event) { PostingThreadState postingState = currentPostingThreadSta…
前情概要 在上一篇中,介绍了EventBus的基本使用方法,以及一部分进阶技巧.本篇及以后的几篇blog将会集中解析EventBus.java,看看作者是如何优雅地实现这个看似简单的事件分发/接收机制. 本篇概述 剖析register的过程,let's get started! 方法签名 完整的register方法签名如下,我们通常调用的register(this)其实最终调用到的register(this, false, 0),另外,使用registerSticky(this)进行调用,其实最…
本期blog作为EventBus(以下简称EB)学习的始动篇,主要记载了EB的功能.优点.使用方法,内容基于github上的README.md与HOWTO.md. 何为EventBus EB实现了Android上的一种事件分发/接收总线机制,其优点可以概括为以下三条: 简洁:将事件分发者与接收者解耦,代码简单清晰: 快速:使用了反射,而不是在Android上效率低下的注解方式进行实现 轻量级:jar <50k EventBus的使用方法 将EventBus引入到项目中(gradle) compi…
1. 简单介绍 Android中在StageFrightMediaScanner实现对多媒体文件的处理. 此外在StageFrightMediaScanner定义了支持的多媒体文件类型. 文件位置 frameworks\av\media\libstagefright\StagefrightMediaScanner.cpp 编译目标 libstagefright.so 2. processFile processFile并没有做什么处理.主要是调用processFileInternal. 另外能够…
Abp中使用EventBus来解耦领域中的业务逻辑,也是订阅-发布模式的一种实现.简单来说就是,当我触发一个事件,注册了这个事件的处理器就会被找到并执行. 先看看整体代码结构 其中Entities文件夹中是对于实体相关的领域事件的实现与本章主题无关,我们就可以先当他不存在了. 可以看到有四个东西我们需要注意 EventData 这个我们可以就当作是事件类型,需要触发的事件就是这个东西. EventHandler 事件处理器.当有事件触发的时候,如果处理器注册了这个事件那么会来执行这个处理器 Ev…
Android 开源项目源码解析(第二期) 阅读目录 android-Ultra-Pull-To-Refresh 源码解析 DynamicLoadApk 源码解析 NineOldAnimations 源码解析 SlidingMenu 源码解析 Cling 源码解析 BaseAdapterHelper 源码分析 Side Menu.Android 源码解析 DiscreteSeekBar 源码解析 CalendarListView 源码解析 PagerSlidingTabStrip 源码解析 公共…
  一.         EventBus简介 1.1.EventBus EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化Android 事件传递,这里的事件可以理解为消息,本文中统一称为事件.事件传递既可用于 Android 四大组件间通讯,也可以用户异步线程和主线程间通讯等等. 传统的事件传递方式包括:Intent.Handler.BroadCastReceiver.Interface 回调,相比之下 EventBus 的优点是代码简洁,使用简单,并将…
转自:http://www.open-open.com/lib/view/open1472216742720.html https://blog.piasy.com/2016/07/11/Understand-OkHttp/ OkHttp官网地址:http://square.github.io/okhttp/OkHttp GitHub地址:https://github.com/square/okhttp 本文是 Piasy 原创,发表于 https://blog.piasy.com,请阅读原文支…
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40920453,本文出自:[张鸿洋的博客] 上一篇带大家初步了解了EventBus的使用方式,详见:Android EventBus实战 没听过你就out了,本篇博客将解析EventBus的源码,相信能够让大家深入理解该框架的实现,也能解决很多在使用中的疑问:为什么可以这么做?为什么这么做不好呢? 1.概述 一般使用EventBus的组件类,类似下面这种方式: public cl…
示例使用 时序图 源码解读 EventBus 使用 官网定义:EventBus 是一个使用 Java 写的观察者模式,解耦的 Android 开源库.EventBus 只需要几行代码即可解耦简化代码,加快开发速度. 使用: 定义 event . Event 就是个标准 POJO 类 public class MessageEvent { public final String message; public MessageEvent(String message) { this.message…