android 源码解读
文章平均质量分 78
Mr_lu_
这个作者很懒,什么都没留下…
展开
-
LeakCanary源码分析
从sample项目中的入口开始查看:public class ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); if (LeakCanary.isInAnalyzerProcess(this)) { // Th原创 2017-08-13 22:44:18 · 337 阅读 · 0 评论 -
Glide源码解读(二)
前面文章分析到buildRequest方法,现在继续看buildRequest方法,调用了buildRequestRecursive方法 private Request buildRequest(Target<TranscodeType> target) { if (priority == null) { priority = Priority.NORMA...原创 2019-10-06 10:04:31 · 219 阅读 · 0 评论 -
Glide源码解读(一)
#Glide 流程 3.5.2作为一个优秀的通用图片加载库。有着几乎所有的优点,使用简单,加载各种格式图片资源,预加载图片资源,根据控件大小合理缩放资源,支持图像变换操作等等,既然这么优秀的框架,那就值得我们好好深入理解它的设计和实现原理。现在我们跟随源码一探究竟with方法有很多重载方法1 使用,一行代码搞定Glide.with(context).load(url).error(erro...原创 2019-10-06 10:04:01 · 201 阅读 · 0 评论 -
EventBus 源码解读
EventBus 基础 发布者通过EventBus发布事件,订阅者通过EventBus订阅事件。当发布者发布事件时,订阅该事件的订阅者的事件处理方法将被调用。这里的事件,指的是一个对象类型。只有对象类型相同时,订阅方法才会被处理,还支持订阅方法在不同的线程中被调用首先是注册方法,获取对象的Class对象,然后去SubscriberMethodFinder类中查找,public void ...原创 2018-07-01 19:03:42 · 217 阅读 · 0 评论 -
RxJava 源码 解读
RxJava 源码解读 一直以来在网上看到关于RxJava的使用博客都称赞RxJava使用起来非常简洁,即使业务逻辑非常复杂,它依然能够保持简洁。于是在个人项目也添加了RxJava和RxAndroid.秉着知其然知其所以然的态度,跟着调用方法一探其源码, 首选是调用方法。这个方法是获取手机里面的所有音乐文件信息,并且返回给回调者,并且这里的ObservableOnSubscribe...原创 2018-06-30 17:34:09 · 331 阅读 · 0 评论 -
采坑记之greendao缓存
采坑记之greendao缓存项目里面ORM框架用的greendao.测试中出现一个问题,在一个界面获取数据库的一个对象,然后更改对象的属性值,没有点击保存按钮。再进入这个界面时,从数据库同样获取的这个对象居然改变了。之前有看到网上说greendao有缓存,所以获取数据比较快,我猜想这里碰到的应该也是这个问题。 我模拟获取数据对象的示例代码,首先拿到对象,然后设置一个属性后,再去数据库获取对象打印...原创 2018-06-04 14:46:57 · 1566 阅读 · 0 评论 -
BroadcastReceiver流程解析
ContextImpl的registerReceiver方法首先查看注册方法@Overridepublic Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, int flags) { return registerReceiver(receiver, filter, null, n...原创 2018-05-25 17:20:51 · 491 阅读 · 0 评论 -
startService源码解读
之前分析过startActivity方法的源码,知道了startActivity的调用流程,大致的流程就是app通过Binder调用AMS的方法,然后AMS也通过Binder调用app的方法,app再回调我们的Activity的生命周期方法。AMS并不是直接保存我们的Activity的引用,而是通过每个Activity对应一个ActivityInfo信息在AMS保存。因为Activity是andr...原创 2018-05-25 09:33:17 · 380 阅读 · 0 评论 -
从startActivity谈起
Activity.java@Overridepublic void startActivity(Intent intent) { this.startActivity(intent, null);}调用了带Bundler参数的重载方法@Overridepublic void startActivity(Intent intent, @Nullable Bundle options) { ...原创 2018-04-28 17:29:12 · 231 阅读 · 0 评论 -
invalidate方法源码追踪
首先调用public void invalidate() { invalidate(true); }调用invalidete 带参数的方法 void invalidate(boolean invalidateCache) { invalidateInternal(0, 0, mRight - mLeft, mBottom - mTop, invalidateCach...原创 2018-05-05 23:29:07 · 574 阅读 · 0 评论 -
setContentView源码解读
setContentView方法是我们Activity里面必须要用的方法,那么当我们调用这个方法的时候系统到底做了什么呢?现在来一探究竟首先查看Activity.java public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID); in...原创 2018-04-15 14:28:31 · 330 阅读 · 0 评论 -
热修复之AndFix探秘
热修复之AndFix探秘近几年热修复技术可谓百花齐放,阿里的底层结构替换即时生效技术AndFix,后来又出来看起来很叼的Sophix,同时支持即时生效和冷启动修复。微信的Tinker和饿了么的Amigo。看了好几遍AndFix原理后,特写个Demo测试完成,写个博客记录下。来张官网的原理图 首先模拟一个类中出现了BUG方法。 然后在布局文件点击事件中调用这个方法,程序不出意外的奔溃退出了。 然后我...原创 2018-03-29 17:36:41 · 279 阅读 · 0 评论 -
View触摸事件源码分析
View的dispatchTouchEvent方法的省略版源码public boolean dispatchTouchEvent(MotionEvent event) { //dispatchTouchEvent的返回值 boolean result = false; //...balabala省略前面部分代码 if (onFilterTouchEventForSecuri...原创 2018-03-19 15:11:40 · 231 阅读 · 0 评论 -
ARouter源码解读
ARouter源码解读以前看优秀的开源项目,看到了页面路由框架ARouter,心想页面路由是个啥东东,于是乎网上搜索查看,是阿里出品开源的,主要是关于页面跳转的解耦框架。一直想看看具体是怎么实现的,今有时间便来一探究竟。传统的页面跳转就是调用系统的startActivity,里面的参数Intent携带了要跳转的信息,可以传入要跳转的activity信息或者action。如果是action则要在清单...原创 2018-02-14 18:27:20 · 465 阅读 · 0 评论 -
Picasso源码分析
首先从调用第一行代码看起// Trigger the download of the URL asynchronously into the image view.Picasso.with().load(url).placeholder(R.drawable.placeholder).error(R.drawable.error).resizeDimen(R.dimen原创 2017-08-19 17:40:27 · 405 阅读 · 0 评论 -
synchronized简版Looper
我们知道Looper的工作机制就是不断的从MessageQueue里面获取消息,没有消息的时候则等待,直到有消息到来,看Looper的源码发现阻塞等待和通知用的是linux的epoll,它是linux内核下高效的的异步唤醒机制。既然是等待和唤醒,那是不是只用java就可以处理了。于是利用synchronized实现一个简版的LooperMessage,里面只是简单的一个数据,并且简单用strin...原创 2019-10-06 10:05:51 · 207 阅读 · 0 评论