- 博客(18)
- 收藏
- 关注
原创 笔记-内存泄漏
leakCanary原理:创建weakReference的时候可以传入一个自定义的ReferenceQueue,当WeakReference被回收时,WeakReference的引用就会传入到queue中。我们创建activity的时候,创建一个WeakReference包含自定义哥的queue指向它,并使用一个set去保存这些WeakReference,当activity被销毁的时候(onDestroy),执行GC,再通过回调遍历所有的queue,并将set中包含被遍历的引用删除,此时还留在set中的就是
2020-07-02 21:04:24
246
原创 flutter异常的坑
java中如果需要抛出异常的话,我们都知道,直接在方法上抛出即可,在调用该方法的地方我们可以进行异常的处理。类似这样:于是,我也在dart中打算这样做。。。果然没这么简单,图中的意思是只能在方法中抛出异常。于是我做了像图中的处理,在try中手动抛出一个异常,再用rethrow将它抛出,然后再看:嗯,看上去好像没啥毛病,抛出来在调用的地方进行捕获嘛,运行下看看。。oh!WTF!,第一行我们可以看到catch custom error是执行了的,也就是说方法中的将异常抛出是执行了,但是没有执
2020-06-05 10:57:47
333
原创 深入handler源码
直接干!new一个handler不带参数的时候,callback默认为null(没有回调),async为false(非同步调用)。看上去是用了一个现成的Looper,将looper里的消息队列赋值到自己的队列,callback一看就知道是有了消息之后的回调,async我们后面再看看具体应用场景可以看到,他们都是发送的sendMessageDelayed。然后看看getPostMessage里面干了什么:将runnable封装成了一个Message对象,但是我们使用handler.send
2020-06-05 09:48:42
186
原创 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
1181
原创 笔记--java内存模型
单线程中,如果后面代码依赖于前面的代码,就不会发生指令重排。锁定规则:如果一个锁处于被锁状态,一定执行unlock后才能lock。变量规则:volatile,如果一个线程先写了volatile变量,另一个线程再读取的值一定是写之后的值。线程启动规则:一个线程通过B.start()启动B,A对变量的修改一定对B可见。线程中断规则:interrupt()方法调用咸鱼被中断线程的代码检测,直到中断。???线程终结规则:A调用B.join()等B终止,B终止前对共享变量的修改对A可见。对象初始化:对象初
2020-05-25 15:23:25
149
原创 一文彻底搞懂静态代理和动态代理
先看下机制上的区别:静态:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。动态:在程序运行时运用反射机制动态创建而成。那么由我来一步步解析为什么产生这样的写法最基本的,举个例子:使用第三方库加载一个图片然后发现不够优美,我们是面向对象编程的开发者!于是我们给方法放进了对象嗯,好像可以了,这下只需要new一个ImageLoaderImpl,然后调用disPlayImage就可以了,美滋滋下班!等用了一段时间,PM找你谈话了
2020-05-15 17:14:53
471
原创 viewmodel全解析
首先看初始化:先看of里干了什么:可以看到,初始化了一个AndroidViewModelFactory,接着初始化了一个ViewModelProvider,先看看AndroidViewModelFactory有什么重要的方法没有记住这个create!因为这个是我们自定义的ViewModel初始化的地方!可以看到,就是拿到viewmodel的构造方法进行了初始化然后再看看get方法里干了什么这里的create就是调用的上面截图的create方法,将viewmodel初始化并返回
2020-05-12 13:13:58
392
原创 okhttp源码大解析(二)
按照执行的顺序,先看retryAndFollowUpInterceptor具体的流程在图中已经标明,那么streamAllocation是什么作用呢从成员变量看,这是个管理网络连接的类,具体的我们可以在ConnectInterceptor中再分析接下来看bridgeInterceptor没啥好解释的,添加默认字段然后去执行proceed方法而已下一个!...
2020-05-07 16:48:11
212
原创 okhttp源码大解析
一般的,我们都这样使用okhttp:一步步来解析:构造者模式就不说了,okhttp最帅的实现应该就是Interceptor了。又是一个list添加,估计着跟retrofit的思想是一样的,肯定是到时候一个个进行解析,经过顺藤摸瓜,最后找到这么个地方:眼前一亮,看名字是获取网络请求的返回值调用链!果不其然!execute就是我们执行同步请求的时候所调用的方法!那么...
2020-05-07 10:35:01
252
原创 Retrofit 源码大解析
首先看create方法这个大多数博客都有讲过,就是使用的java自己的动态代理,生成自定义的接口的具体实现类,并在执行接口中的方法的时候自动执行具体实现类的invoke方法,最终执行到InvocationHandler的invoke方法引申:为什么动态代理只能够针对接口呢?答:因为java是单继承,生成的动态代理类结构如下:public final class $Proxy0 ...
2020-04-30 15:48:17
404
原创 flutter循环中的坑
话不多说,先上一段代码猛地一看,好像没啥问题,挨个打印数字,到了2之后就不打印了,也就是说控制台应该只有1和2,然后我们去看看控制台纳尼?为什么没有return掉。。。点进forEach方法看下这样就很清楚了,后面的(item){}其实是传的方法,也就是说,一开始的代码等价于:需要return的是test方法,把find2给return掉,有毛用。。。所以正...
2020-04-29 21:21:56
864
原创 livedata传相同的值会不会执行onchanged回调
今天突发奇想,livedata的回调方法名字是onChanged,看名字像是,在值变化了之后会进行回调,那么如果两次给MutableLiveData设置的值是完全一样的话,还会不会走onChanged回调呢?那么就有了接下来这个实验一开始,我是在执行网络请求的时候将MutableLiveData进行初始化:这样写,不管怎么想,都会回调的,起码两个变量的hashCode就不一样起码会根据...
2020-04-28 18:19:28
3439
原创 Android共享元素过渡动画解析
共享元素动画只知道很炫酷,却不知道其原理,网上也没什么资料,今天看下其中的源代码。首先是这么写,那么看startActivity带的Bundle什么作用Context里面是一个抽象方法,而且options只能用系统的ActivityOptions,都没法自定义。。既然我们大部分都是通过Activity进行跳转的,那么直接看Activity对这个方法的实现接着往下走对...
2020-04-26 12:16:49
1415
原创 flutter版match-parent
在安卓开发中我们都知道,在需要子view充满父viewgroup的时候可以使用match-parent,就可以实现子view的高度随着父viewgroup的高度而变化,但是在flutter中应该怎么办呢?这几天,在研究verticalDivider的时候终于被我找到了,虽然应用场景不多,但是终于是解决了一大难题一般的,在flutter中,比如在Row中,我们希望左边是一个icon,然后右边...
2020-04-14 15:22:50
1806
原创 flutter 自定义card阴影
最近在用flutter写web程序,简直是炼狱模式。。然后遇到个需求,原本的Card阴影无法满足产品需求,需要像IOS 那种超级高大上的,似影非影的效果。。(简直分分钟想打死产品)一开始,当然都是百度了,于是百度到了一个方法:BoxShadow!于是高高兴兴开干了,代码如下嗯。。。看上去好像没啥毛病,Y轴方向偏移7,blurRadius:模糊延申14,spreadRadius:不模...
2020-04-13 15:49:48
1151
2
原创 flutter 版能力图
话不多说,先上图先说下大概思路:1,根据半径画最外圈的最浅色的那个背景,然后半径一次减少,画颜色比较深的背景+(1)先计算渐变色背景的各个点的坐标,公式:x = R * cos(角度 - Π/2),y = R * sin(角度 - Π/2),这里减Π/2是为了符合x,y坐标的变化规律,因为原点是取在图形中心(2)再使用paint画出各个颜色的背景,记得save和restor...
2019-11-22 11:07:15
541
原创 flutter 联网交互
与后台的交互过程,往往是一个app的核心,在flutter中遇到不少小坑,希望可以帮助小白解决日常问题。日常上代码:一、 一般来说,后台都会是这种返回方式,即通过produces设定为json的方式返回给前台一个json,于是flutter的前台解析方式如下: 这里是用自己写的json转类的方法,具体可以百度flutter将json转类的方法。二、了解一下后台就知道...
2019-01-30 09:23:05
632
原创 flutter 解析list
在flutter解析list过程中出现一点小波折,相信很多小伙伴也会遇到,谨以此记:如果可以用第三方库的话,可以使用此大神博客:https://blog.csdn.net/qqqq245425070/article/details/83931496但是我想知道用dart:convert进行list解析到底应该如何做,终于试出来,直接上代码因为在fromjson的时候,解析出来的li...
2019-01-28 10:48:01
1754
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人