
源码分析
文章平均质量分 75
?
emmmmsuperdan
这个作者很懒,什么都没留下…
展开
-
RxJava常用的操作符
ZipZip: 把两个流返回结果一起调用;Zip(a,b,new Function<>(a的类型,b的类型,结合结果的返回类型));ZipWith:把一个流和另一个流的结果一起调用;a.ZipWith(b,new Function<>(b的类型,结合结果的返回类型));...原创 2024-02-09 12:14:41 · 176 阅读 · 0 评论 -
Android MMKV使用及 MMAP原理
什么是MMKVMMKV——基于 mmap 的高性能通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。MMKV 是基于 mmap 内存映射的移动端通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。通过 mmap 内存映射文件,提供一段可供随时写入的内存块,App 只管往里面写数据,由操作系统负责将内存回写到文件,不必担心 crash 导致数据丢失。优点• MMKV 是基于 mmap 内存映射的 k原创 2023-03-22 18:05:36 · 992 阅读 · 0 评论 -
启动框架 Anchors接入和分析
从哪下手整个冷启动过程中,系统方法我们无法进行优化,主要需要优化的是系统暴露出来的一些生命周期方法,从Application的attachBaseContext开始,到启动页Activity或者首页Activity的onResume结束,甚至直到Activity的界面绘制结束。优化的目的就是使这个过程尽量快,不要出现卡顿。其中最重要的就是Application中的onCreate方法了。初始化任务分析• 将初始化任务按两个维度区分:是否耗时&是否必要。必要且耗时的,考虑使用其他线程来初始化(比如Tin原创 2023-03-02 20:39:16 · 588 阅读 · 0 评论 -
Android AsyncTask异步任务
AsyncTask类似于Handle,它更轻量级,不需要借助线程和Handle,采用的是Thread_Pool_Executor线程池,不适合执行耗时长的任务;配置后的线程池如下:1.核心线程数等于CPU核心数+1;2.线程池的最大线程数为CPU核心数的2倍+1;3.任务队列容量为128;AsyncTask<Params,Progress,Result>是一个...原创 2018-03-17 10:36:17 · 221 阅读 · 0 评论 -
android 动画
1.帧动画2. view动画3.属性动画(和view动画相比,属性动画可以响应变化后的区域)原创 2018-08-12 20:24:14 · 188 阅读 · 0 评论 -
强记知识点
Android:Android系统结构:Android系统体系结构(采用软件叠层,降低系统5层之间的耦合性):1. 应用程序层--------就是手机上的App2.应用程序框架3.函数库-------------里面都是C/C++库,不能直接调用这些库,但是通过应用程序框架可以运行4.Android运行时---------分为两部分1.Android核心库集,即Java语言核心库所使用的大部分功能...原创 2021-03-17 12:45:41 · 1001 阅读 · 1 评论 -
LeakCanary源码分析
主要原理:1.WeakReference 创建时,传入一个 ReferenceQueue对象。当被WeakReference 引用的对象的生命周期结束,一旦被 GC 检查到,GC 将会把该对象添加到 ReferenceQueue 中,待ReferenceQueue处理。当 GC 过后对象一直不被加入 ReferenceQueue,它可能存在内存泄漏。每当一个Activity页面调用onDestroy时候,获取到这个Activity去检测这个Activity是否真的被系统GC。如果存在内存泄漏,说明有原创 2021-03-15 17:27:53 · 163 阅读 · 0 评论 -
JsBridge原理
JsBridge是Android Native原生和H5之间通信的桥梁,而且这种通信是双方互通的;H5调用Native方法:1.从H5页面通过JSBridge触发一个url scheme; (url scheme具体作用:可以用系统的OpenURI打开一个类似于url的链接(可拼入参数),然后系统会进行判断,如果是系统的url scheme,则打开系统应用,否则找看是否有app注册这种scheme,打开对应app);2.Native页面捕获对应的url scheme,并对其进行分析...原创 2021-03-15 16:00:02 · 303 阅读 · 0 评论 -
Glide源码分析
常见用法:进阶点的:常见图片处理库和Glide的区别:Glide: 图片的异步加载(基础功能) 支持设置加载尺寸、设置加载中以及加载失败图片、设置加载动画、设置图文混排 多样式的媒体加载(设置缩略图支持:先加载缩略图 然后在加载全图) 支持设置磁盘缓存策略、设置跳过内存缓存、清理缓存 通过设置绑定生命周期,更好的让加载图片的请求的生命周期动态管理起来; 优点:支持多样化媒体加载 Glide 不仅是一个图片缓存,它支持 Gif、We.原创 2021-03-14 22:47:40 · 444 阅读 · 0 评论 -
Handle源码分析
因为只有主线程能修改UI组件,所以主线程又被称作UI线程;但是若只由主线程来修改UI的话,这样会导致新启动的线程无法动态改变UI的属性值或者是进行耗时操作,主线程会被阻塞(ANR异常,系统无法响应输入事件和BroadCast),而子线程又不能修改UI组件,只能在新进程里发出一通消息,这时就需要采用handle的传递机制;Handle的作用有两个:在新启动的线程发送消息(一般采用sendEmpt...原创 2018-03-17 08:50:09 · 1019 阅读 · 1 评论 -
Android LRUCache(内存缓存)和DisLrucache(硬盘缓存)详解
Lrucache(继承了LinkedHashMap):LRUCache的使用:原理:所以接下来讲一下LinkedHashMap源码(采用双向链表的双向队列)是怎么实现一个删除最近最少使用数据的功能?get和put方法中都调用了recordAccess方法,通过这个方法记录下用户访问的Entry,并把它移到队列的尾部去分析完父类LinkedHashMap,...原创 2018-08-14 14:57:43 · 756 阅读 · 0 评论 -
Android 图片加载框架:Google开发的框架源码Volley 以及Picasso和Glide比较
首先了解一下,它是封装了HTTPConnection和HTTPClient类的一个框架,适用于数据量少但是通信频繁的情况,如加载图片;就拿StringRequest(用来请求字符串的)举例:Volley的顺序是 : Http请求-------再接受响应 只需三步GET:1.首先新建一个请求队列,用来存放一会要发出的Http消息:2.构造一条HTTP请求:...原创 2018-08-14 15:55:47 · 484 阅读 · 0 评论 -
okhttp3
源码分析:上面采用了Builder模式来获取OKHttpClient对象,(Request和Response也用了);建造者好处:使用建造者模式可以使客户端不必知道产品内部的组成细节。(封装性)具体的建造者之间是相互独立的,对系统的扩展非常有利。(扩展性)创建Request对象:Response构造方法:先看看okhttp的同步请求:o...原创 2018-09-17 09:49:44 · 349 阅读 · 0 评论