本篇为第二篇整顿的文章,第一篇的链接
纯干货 Android 知识点整顿(一)
1.OkHttp 解析
首先 OkHttp 外部是一个门户模式,所有的下发工作都是通过一个门户 Dispatcher 来进行散发。
而后在网络申请阶段通过责任链模式,链式的调用各个拦截器的 intercept 办法。其中有 2 个比拟重要的拦截器:CacheInterceptor 和 CallServerInterceptor。它们别离用来做申请缓存和执行网络申请操作。
最初在了解源码实现的根底上,对 OkHttp 的性能进行了一些扩大,实现了网络申请进度的实现。
BridgeInterceptor:次要对 Request 中的 Head 设置默认值,比方 Content-Type、Keep-Alive、Cookie 等。
CacheInterceptor:负责 HTTP 申请的缓存解决。
ConnectInterceptor:负责建设与服务器地址之间的连贯,也就是 TCP 链接。
CallServerInterceptor:负责向服务器发送申请,并从服务器拿到远端数据后果。
2.Bitmap 解析
默认状况下 BitmapFactory 应用 Bitmap.Config.ARGB_8888 的存储形式来加载图片内容,而在这种存储模式下,每一个像素须要占用 4 个字节。因而下面图片 rodman 的内存大小能够应用如下公式来计算:
宽 高 4 = 600 600 4 = 1440000
bitmap 加载优化:
批改占用空间少的存储形式能够疾速无效升高图片占用内存。比方通过 BitmapFactory.Options 的 inPreferredConfig 选项,将存储形式设置为 Bitmap.Config.RGB_565。这种存储形式一个像素占用 2 个字节,所以最终占用内存间接减半。
Options 中还有一个 inSampleSize 参数,能够实现 Bitmap 采样压缩,这个参数的含意是宽高维度上每隔 inSampleSize 个像素进行一次采集。
Bitmap 复用:Options.inBitmap
BitmapRegionDecoder 用于实现图片分片显示性能
3.Window、Activity、View 三者关系
一个 Activity 中有一个 window,也就是 PhoneWindow 对象,在 PhoneWindow 中有一个 DecorView,在 setContentView 中会将 layout 填充到此 DecorView 中。
一个利用过程中只有一个 WindowManagerGlobal 对象,因为在 ViewRootImpl 中它是 static 动态类型。
每一个 PhoneWindow 对应一个 ViewRootImple 对象。
WindowMangerGlobal 通过调用 ViewRootImpl 的 setView 办法,实现 window 的增加过程。
ViewRootImpl 的 setView 办法中次要实现两件事件:View 渲染(requestLayout)以及接管触屏事件。
4.Handler 机制
利用启动是从 ActivityThread 的 main 开始的,先是执行了 Looper.prepare(),该办法先是 new 了一个 Looper 对象,在公有的构造方法中又创立了 MessageQueue 作为此 Looper 对象的成员变量,Looper 对象通过 ThreadLocal 绑定 MainThread 中;
当咱们创立 Handler 子类对象时,在构造方法中通过 ThreadLocal 获取绑定的 Looper 对象,并获取此 Looper 对象的成员变量 MessageQueue 作为该 Handler 对象的成员变量;
在子线程中调用上一步创立的 Handler 子类对象的 sendMesage(msg) 办法时,在该办法中将 msg 的 target 属性设置为本人自身,同时调用成员变量 MessageQueue 对象的 enqueueMessag() 办法将 msg 放入 MessageQueue 中;
主线程创立好之后,会执行 Looper.loop() 办法,该办法中获取与线程绑定的 Looper 对象,继而获取该 Looper 对象的成员变量 MessageQueue 对象,并开启一个会阻塞(不占用资源)的死循环,只有 MessageQueue 中有 msg,就会获取该 msg,并执行 msg.target.dispatchMessage(msg) 办法(msg.target 即上一步援用的 handler 对象),此办法中调用了咱们第二步创立 handler 子类对象时覆写的 handleMessage() 办法。
5.APK 安装包体积优化
安装包的监控
次要介绍了几个能够用来剖析安装包大小以及具体内容的工具:Apk Analyzer 和 ApkChecker。实际上,在开发过程中,良好的编程习惯和严格的 code review 也是十分重要的。
安装包优化实际
次要思路就是删减无用资源或者代码,并对资源文件进行相应的压缩优化。实际上除了资源文件,对于代码局部也能够更进一步的优化,比方应用 Proguard,或者间接应用 R8 编译形式。只是因为 R8 还处于试验阶段,咱们我的项目中没有过多的实际过程。对于这一部分极力推荐你浏览一下 Jake Wharton 的集体博客:jakewharton 中的相干介绍。
感觉文章不错的,给我点个赞哇,关注一下呗!
技术交换可关注微信公众号【君伟说】,加我好友一起探讨
微信交换群:加好友 wayne214(备注技术交换)邀你入群,抱团学习共提高