android优化

android各方面优化知识点记录


UI优化

从3.0开始,Android支持了硬件加速,到Android4.0默认开启硬件加速

Android4.1之后,Google提出了黄油计划,主要包括两个内容:VSYNC,Triple Buffering(三重缓存)

RenderThread是在Android5.0提出的,执行一部分draw的工作(正常情况下,硬件加速是开启的,主线程的 draw 函数并没有真正的执行 drawCall ,而是把要 draw 的内容记录到 DIsplayList 里面,同步到 RenderThread 中,一旦同步完成,主线程就可以被释放出来做其他的事情,RenderThread 则继续进行渲染工作)

xml代码转换成java代码,比如X2C,X2j,很多坑,asynclayoutinflater也很坑

ViewStub、Merge、ConstraintLayout(性能也一般)

litho(Litho是Facebook推出的一套高效构建Android UI的声明式框架)

今日头条适配方案,主要是通过动态修改density值来保证所有设备的屏幕宽度都是固定的dp值。用到的公式就是px = density * dp。

Jetpack Compose,更少更直观的代码,更强大的功能,能提高开发速度


安全优化

加固 有利有弊

https ssl握手阶段分成五步:

  1. 客户端给出协议版本号、生成的随机数(Client random),以及客户端支持的加密方法。
  2. 服务端确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数。
  3. 客户端确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务器。
  4. 服务器使用自己的私钥,获取客户端发来的随机数(Premaster secret)。
  5. 双方根据约定的加密方法,使用前面的三个随机数,生成会话密钥(session key),用来加密接下来的对话过程。

包体积优化

详见【包体积优化】一文


SO库动态加载:

https://juejin.cn/post/6917941750082469901#heading-10
https://juejin.cn/post/7107958280097366030#heading-1
https://juejin.cn/post/7107958280097366030

加载so的时候,可能碰到依赖关系的问题,尤其是第三方的so文件
https://github.com/facebook/SoLoader
https://github.com/KeepSafe/ReLinker
分析依赖

除了System.load,还可以使用Tinker

可以参考这个例子
https://github.com/TestPlanB/SillyBoy


启动优化

APP 启动黑/白屏
Android 应用启动时,尤其是大型应用, 经常出现几秒钟的黑屏或白屏,黑屏或白屏取决于主界面 Activity 的主题风格。

参考隔壁文章(app启动优化)


参考文章:
https://juejin.cn/post/7104228637594877965
https://juejin.cn/post/7214858677173518393#comment
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI1MzYzMjE0MQ==&action=getalbum&album_id=2385951151339913221&scene=173&from_msgid=2247491039&from_itemidx=1&count=3&nolastread=1#wechat_redirect
https://juejin.cn/post/6917941750082469901#heading-10
https://juejin.cn/post/7107958280097366030#heading-1
https://juejin.cn/post/7107958280097366030

https://github.com/bytedance/ByteX
https://github.com/facebook/SoLoader
https://github.com/KeepSafe/ReLinker
https://github.com/TestPlanB/SillyBoy