Colourful Day

我需要,最狂的风,和最静的海。

——顾城《第八个早晨》


  • 首页

  • 分类

  • 归档

  • 标签

  • 留言

  • 关于

RxJava源码解析

发表于 2019-11-16 | 分类于 Android Blog | 评论数:
本文中的源码基于 RxJava1RxJava : io.reactivex:rxjava:1.3.4 以下是各个 Part 主要分析源码的方向 Part 1: Observable, Observable.OnSubscribe, Subscriber Part 2: map Part 3: subscribeOn Part 4: observeOn Part 1先来看一个最简单的 RxJava Demo 123456789101112131415161718192021Observable.create(new Observable.OnSubscribe<String>() ...
阅读全文 »

Broadcast源码解析

发表于 2019-11-10 | 更新于 2019-11-13 | 分类于 Android Blog | 评论数:
注册广播ContextImpl123456789101112131415161718192021222324252627282930313233343536373839404142@Overridepublic Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { return registerReceiver(receiver, filter, null, null);}@Overridepublic Intent registerReceiver(BroadcastRe ...
阅读全文 »

DiskLruCache源码解析

发表于 2019-10-15 | 分类于 Android Blog | 评论数:
DiskLruCache : https://github.com/JakeWharton/DiskLruCache DiskLruCache 在 Android 开发中应用的非常广泛,比较常用的就是图片的三级缓存中。比如在 Glide 中,图片在硬盘上的缓存就是采用了 DiskLruCache 。 在 DiskLruCache 中有三种文件, journal 文件,里面是记录着我们的操作日志; journal.tmp 文件,这个文件是临时文件; journal.bkp 文件,这个文件是备份文件。 在我们操作 DiskLruCache 过程中,在修改内存中的缓存的同时,也会在硬盘中的 jo ...
阅读全文 »

Glide源码解析(三)

发表于 2019-08-07 | 更新于 2019-08-08 | 分类于 Android Blog | 评论数:
本篇是 Glide 系列的最后一篇,主要讲一下 into 方法里面的逻辑。into 的逻辑也是最多最复杂的,可能需要反复阅读源码才能搞清楚。 Glide : https://github.com/bumptech/glide version : v4.9.0 RequestBuilder12345678910111213@NonNullpublic <Y extends Target<TranscodeType>> Y into(@NonNull Y target) { return into(target, /*targetListener=*/ null ...
阅读全文 »

Glide源码解析(二)

发表于 2019-08-06 | 更新于 2019-08-08 | 分类于 Android Blog | 评论数:
之前已经讲过 Glide.with 了,那么今天就来讲讲 load 方法。 Glide : https://github.com/bumptech/glide version : v4.9.0 源码解析load 重载的方法有很多,这里就挑一个看了。来看看 load(String string) 内部的代码。 RequestManager123456@NonNull@CheckResult@Overridepublic RequestBuilder<Drawable> load(@Nullable String string) { return asDrawable(). ...
阅读全文 »

Glide源码解析(一)

发表于 2019-08-04 | 更新于 2019-08-05 | 分类于 Android Blog | 评论数:
前言Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道(decode pipeline),以及自动的资源池技术。 Glide 充分考虑了Android图片加载性能的两个关键方面: 图片解码速度 解码图片带来的资源压力 为了让用户拥有良好的App使用体验,图片不仅要快速加载,而且还不能因为过多的主线程I/O或频繁的垃圾回收导致页面的闪烁和抖动现象。 Glide使用了多个步骤来确保在Android上加载图片尽可能的快速和平滑: 自动、智能地下采样(downsampling)和缓存(caching),以最小化存储开销 ...
阅读全文 »

闲聊MultiDex

发表于 2019-07-09 | 分类于 Android Blog | 评论数:
MultiDex 是什么?当Android系统安装一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODEX文件,即Optimised Dex。执行ODex的效率会比直接执行Dex文件的效率要高很多。 但是在早期的Android系统中,DexOpt有一个问题,DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面。但是这个链表的长度是用一个short类型来保存的,导致了方法id的数目不能够超过65536个。当一个项目足够大的时候,显然这个方法数的上限是不够的。尽管在新 ...
阅读全文 »

LeakCanary源码解析

发表于 2019-07-06 | 分类于 Android Blog | 评论数:
LeakCanary : https://github.com/square/leakcanary version : 1.6.3 HeaderLeakCanary 是一款专门用来侦测 Android 内存泄漏的类库。使用方式简单,代码侵入性低,基本上算是 Android 开发必备工具了。 今天就主要来分析一下 LeakCanary 的实现原理。在开头就简单地讲讲它的实现思路:LeakCanary 将检测的对象(一般是 Activity 或 Fragment)放入弱引用中,并且弱引用关联到引用队列中,触发 GC 之后,查看引用队列中是否存在该弱引用,如果发现没有,那么有可能发生内存泄漏了,du ...
阅读全文 »

闲谈Android中的内存泄漏

发表于 2019-06-28 | 更新于 2019-06-29 | 分类于 Android Blog | 评论数:
Part 1在长久以来的 Android 开发过程中,内存泄漏一直是一个比较头疼的问题。内存泄漏会导致应用卡顿,用户体验不佳,甚至会造成应用崩溃的严重后果。所以如何科学地进行内存管理一直是大家探讨的话题,从一开始主动使用 MAT 分析 hprof 文件,到后来 LeakCanary “被动”的接收内存泄漏消息。应用中发现内存泄漏的手段越来越多了,操作也越来越便捷,但内存泄漏的问题还是不能轻易忽视的,提高应用的体验和质量也是迫在眉睫。 那今天,就从最基本的开始聊聊内存泄漏。 Part 2内存泄漏简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收。 ...
阅读全文 »

深入理解Binder

发表于 2019-05-21 | 更新于 2019-06-04 | 分类于 Android Blog | 评论数:
之前一直对 Binder 理解不够透彻,仅仅知道一些皮毛,所以最近抽空深入理解一下,并在这里做个小结。 Binder是什么Binder 是 Android 系统中实现 IPC (进程间通信)的一种机制。Binder 原意是“胶水、粘合剂”,所以可以想象它的用途就是像胶水一样把两个进程紧紧“粘”在一起,从而可以方便地实现 IPC 。 进程通信那么为什么会有进程通信呢?这是因为在 Linux 中进程之间是隔离的,也就是说 A 进程不知道有 B 进程的存在,相应的 B 进程也不知道 A 进程的存在。A 、B 两进程的内存是不共享的,所以 A 进程的数据想要传给 B 进程就需要用到 IPC 。 在这里 ...
阅读全文 »
12…12
俞其荣

俞其荣

向前跑 迎着冷眼和嘲笑

120 日志
11 分类
51 标签
RSS
GitHub Twitter 微博 Email
Creative Commons
© 2015 — 2021 俞其荣
由 Hexo 强力驱动
|
主题 — NexT.Muse
Hosted by Coding Pages