『一篇就够了系列』Android App优化知识点全收

    • 工具
  • 耗电定位

    • 优化
  • 定位层面的优化

  • 硬件检测优化

  • 其它

  • 7.【图片优化】

  • 8. 【代码优化】

欢迎加入Android开发交流QQ群:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1. 【布局优化】

====================================================================

原理


60fps

cpu和gpu工作协调:CPU处理逻辑运算,GPU处理浮点运算;

检测方法


系统设置–开发者选项–调试GPU过度绘制

无色:没有过度绘制,每个像素绘制了 1 次。

蓝色:每个像素多绘制了 1 次。大片的蓝色可以接受,如果整个窗口是蓝色的,可以尝试优化减少一次 绘制。

绿色:每个像素多绘制了 2 次。

淡红:每个像素多绘制了 3 次。一般来说,这个区域不超过屏幕的 1/4 是可以接受的。

深红:每个像素多绘制了 4 次或者更多。严重影响性能,需要优化,避免深红色区域。

优化方法


减少GPU过度绘制

如非需要,不建议设置activity的背景;

减少CPU工作

布局优化

  1. include、merge、ViewStub

  2. ConstraintLayout 降低层级

  3. RelativeLayout和LinearLayout的选择:

RelativeLayout层级少,但是子View会调用两次onMeasure;LinearLayout层级多,会增加内存,并且如果使用weight属性也会调用两次onMeasure。在不影响层级深度的情况下,使用LinearLayout和FrameLayout而不是RelativeLayout.

  1. SurfaceView 或 TextureView

工具


  1. uiautomator.bat

分析xml布局方式;

  1. monitor.bat

绿: 表示该 View 的此项性能比该 View Tree 中超过 50% 的 View 都要快;例如,代表Measure 的是绿点,意味着这个视图的测量时间快于树中的视图对象的 50%。

黄: 表示该 View 的此项性能比该 View Tree 中超过 50% 的 View 都要慢;

红: 表示该 View 的此项性能是 View Tree 中最慢的;

2. 【内存管理】

====================================================================

内存模型


JVM:方法区、虚拟机栈、本地方法栈、堆、程序计数器

内存抖动


内存分配速度大于回收速度。

比如拼接string字符串,换成stringbuffer或stringbuilder。

回收算法


标记清除算法 Mark-Sweep

复制算法 Copying

标记压缩算法 Mark-Compact

分代收集算法

工具


  1. profiler

  2. MemoryAnalyzer

  3. leakcanary

解决内存泄漏的方法


  1. 单例

  2. handler

  3. 静态变量

  4. 匿名内部类

  5. 注册与取消注册

  6. 定时任务

  7. 资源关闭

  8. 属性动画

  9. webview内存泄漏(开个新进程)

  10. 其它注意事项:

基本数据类型用static final 替换static;

使用for循环还是迭代器Iterator对比:

采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快

采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快

从数据结构角度分析,for循环适合访问顺序结构,可以根据下标快速获取指定元素.而Iterator 适合访问链式结构,因为迭代器是通过next()和Pre()来定位的.可以访问没有顺序的集合.

而使用 Iterator 的好处在于可以使用相同方式去遍历集合中元素,而不用考虑集合类的内部实现(只要它实现了 java.lang.Iterable 接口),如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 Set 来组织数据,那遍历元素的代码不用做任何修改,如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整,因为List有序,Set无序,结构不同,他们的访问算法也不一样.(还是说明了一点遍历和集合本身分离了)

3. 【网络优化】

====================================================================

解决方案


  1. API接口设计:多个api得到的数据合并一个api得到;

  2. GZip压缩request和response;

  3. Protocol Buffer代替json;

  4. 获取图片的URL告知服务器所需图片的宽高;

比如根据不同网络条件返回不同大小图片;采用webp;

  1. 大文件下载断点续传;

  2. 增量包:bsdiff和bspatch;

  3. 网络请求的数据进行缓存;

比如将网络请求得到的数据放入数据库,每次加载页面先从数据库获得,等获取到网络数据后更新UI和数据库;

  1. JobScheduler在wifi情况下进行下载任务,比如广告等;

5.0后用JobScheduler,8.0后用WorkManager。

  1. webview加载,涉及到前端html页面优化;

专项:弱网优化


先缓存请求,等网络情况好时再通过JobScheduler发送请求。比如点赞。

通过OkHttpClient配置cache,当手机没有联网的时候,就可以直接从缓存中加载数据。还可以设置读、写、连接超时。

4. 【应用瘦身】

====================================================================

  1. AndResGuard资源文件瘦身;

  2. lint去除无用资源:Analyze > Run Inspection By Name > unused resources;

  3. proguard:开启 minifyEnabled 混淆代码,可以压缩文件,使用 shrinkResources 去除无用资源;

  4. 图片:

使用svg格式(xml格式);

tinypng压缩;

webp格式;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

结尾

如何才能让我们在面试中对答如流呢?

答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?为此我整理了一份Android学习资料路线:

这里是一份BAT大厂面试资料专题包:

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

频+大厂面试真题+项目实战源码》]( )收录**

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值