Android
Genius_sasuke
这个作者很懒,什么都没留下…
展开
-
笔记-内存泄漏
leakCanary原理:创建weakReference的时候可以传入一个自定义的ReferenceQueue,当WeakReference被回收时,WeakReference的引用就会传入到queue中。我们创建activity的时候,创建一个WeakReference包含自定义哥的queue指向它,并使用一个set去保存这些WeakReference,当activity被销毁的时候(onDestroy),执行GC,再通过回调遍历所有的queue,并将set中包含被遍历的引用删除,此时还留在set中的就是原创 2020-07-02 21:04:24 · 262 阅读 · 0 评论 -
深入handler源码
直接干!new一个handler不带参数的时候,callback默认为null(没有回调),async为false(非同步调用)。看上去是用了一个现成的Looper,将looper里的消息队列赋值到自己的队列,callback一看就知道是有了消息之后的回调,async我们后面再看看具体应用场景可以看到,他们都是发送的sendMessageDelayed。然后看看getPostMessage里面干了什么:将runnable封装成了一个Message对象,但是我们使用handler.send原创 2020-06-05 09:48:42 · 215 阅读 · 0 评论 -
RV与LV
onMeasure:注释一:如果RV设置match_parent或者精确数值,调用mLayout来测量子view大小注释二:如果设置wrap-content,使用layoutManager来测量onLayout:1、如果在测量阶段没有用dispathLayoutStep2进行测量的话,在此阶段使用它再执行一遍本质上是调用layoutManager的onLayoutChildren,具体看layoutManager具体实现layoutChunk方法每执行一次就添加一个子view到RV中1、从缓原创 2020-05-27 16:25:08 · 1232 阅读 · 0 评论 -
一文彻底搞懂静态代理和动态代理
先看下机制上的区别:静态:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。动态:在程序运行时运用反射机制动态创建而成。那么由我来一步步解析为什么产生这样的写法最基本的,举个例子:使用第三方库加载一个图片然后发现不够优美,我们是面向对象编程的开发者!于是我们给方法放进了对象嗯,好像可以了,这下只需要new一个ImageLoaderImpl,然后调用disPlayImage就可以了,美滋滋下班!等用了一段时间,PM找你谈话了原创 2020-05-15 17:14:53 · 490 阅读 · 0 评论 -
viewmodel全解析
首先看初始化:先看of里干了什么:可以看到,初始化了一个AndroidViewModelFactory,接着初始化了一个ViewModelProvider,先看看AndroidViewModelFactory有什么重要的方法没有记住这个create!因为这个是我们自定义的ViewModel初始化的地方!可以看到,就是拿到viewmodel的构造方法进行了初始化然后再看看get方法里干了什么这里的create就是调用的上面截图的create方法,将viewmodel初始化并返回原创 2020-05-12 13:13:58 · 433 阅读 · 0 评论 -
okhttp源码大解析(二)
按照执行的顺序,先看retryAndFollowUpInterceptor具体的流程在图中已经标明,那么streamAllocation是什么作用呢从成员变量看,这是个管理网络连接的类,具体的我们可以在ConnectInterceptor中再分析接下来看bridgeInterceptor没啥好解释的,添加默认字段然后去执行proceed方法而已下一个!...原创 2020-05-07 16:48:11 · 250 阅读 · 0 评论 -
okhttp源码大解析
一般的,我们都这样使用okhttp:一步步来解析:构造者模式就不说了,okhttp最帅的实现应该就是Interceptor了。又是一个list添加,估计着跟retrofit的思想是一样的,肯定是到时候一个个进行解析,经过顺藤摸瓜,最后找到这么个地方:眼前一亮,看名字是获取网络请求的返回值调用链!果不其然!execute就是我们执行同步请求的时候所调用的方法!那么...原创 2020-05-07 10:35:01 · 292 阅读 · 0 评论 -
Retrofit 源码大解析
首先看create方法这个大多数博客都有讲过,就是使用的java自己的动态代理,生成自定义的接口的具体实现类,并在执行接口中的方法的时候自动执行具体实现类的invoke方法,最终执行到InvocationHandler的invoke方法引申:为什么动态代理只能够针对接口呢?答:因为java是单继承,生成的动态代理类结构如下:public final class $Proxy0 ...原创 2020-04-30 15:48:17 · 416 阅读 · 0 评论 -
livedata传相同的值会不会执行onchanged回调
今天突发奇想,livedata的回调方法名字是onChanged,看名字像是,在值变化了之后会进行回调,那么如果两次给MutableLiveData设置的值是完全一样的话,还会不会走onChanged回调呢?那么就有了接下来这个实验一开始,我是在执行网络请求的时候将MutableLiveData进行初始化:这样写,不管怎么想,都会回调的,起码两个变量的hashCode就不一样起码会根据...原创 2020-04-28 18:19:28 · 3627 阅读 · 0 评论 -
Android共享元素过渡动画解析
共享元素动画只知道很炫酷,却不知道其原理,网上也没什么资料,今天看下其中的源代码。首先是这么写,那么看startActivity带的Bundle什么作用Context里面是一个抽象方法,而且options只能用系统的ActivityOptions,都没法自定义。。既然我们大部分都是通过Activity进行跳转的,那么直接看Activity对这个方法的实现接着往下走对...原创 2020-04-26 12:16:49 · 1454 阅读 · 0 评论