android内存优化方案,通过五轮面试斩获offer阿里实习生亲述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i62jTwiL-1648367295439)(https://upload-images.jianshu.io/upload_images/24142630-0bc25c43f977aad3.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

前言

网上关于启动优化的文章多不胜数,内容千篇一律,大都是列举一些耗时操作,采用异步加载、懒加载等。

而在面试过程中,关于启动优化的问题,如果只是很表面地回答耗时操作应该放在子线程,显然太过于普通,无法跟竞争者拉开差距。如何让面试官知道你的“内功深厚”,那肯定是要往原理层面去回答。

本文重点还是关注原理,冷启动优化这个问题能延伸到很多原理层面的知识点,本文比较有意思的地方是通过反编译今日头条App,研究大厂的启动优化方案。

项目实战

  • 启动速度
  • 流畅度
  • 抖音在APK包大小资源优化的实践
  • 优酷响应式布局技术全解析
  • 网络优化
  • 手机淘宝双十一性能优化项目揭秘
  • 高德APP全链路源码依赖分析
  • 彻底干掉OOM的实战经验分享
  • 微信Android终端内存优化实践

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hbDvRRby-1648367295440)(https://upload-images.jianshu.io/upload_images/24944255-fb8bbe216e72b287.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

理论

在Android应用优化方面,我们主要从以下6个方面进行优化:

  • 启动速度与执行效率优化
  • 布局检测与优化
  • 内存优化
  • 耗电优化
  • 网络传输与数据存储优化
  • APK大小优化

一、启动速度与执行效率优化

  • 冷启动和热启动解析
    本节主要介绍启动方式、特点、应用启动的流程、测量应用启动的时间、什么才是应用的启动时间、降低应用启动时的耗时、优化应用启动时的体验。

  • APP启动黑白屏解决办法
    解决方法1,把启动白屏的背景换成一张图片;解决方法2,把启动白屏背景变透明。

  • APP卡顿问题分析及解决方案
    16ms原则;
    卡顿处理;
    Triple Buffer,既然丢帧的情况不可避免,Android 团队从未放弃对这块的优化处理,于是便出现了Triple Buffer(三缓冲机制)。

  • 启动速度与执行效率优化之StrictMode
    StrictMode 详解、Systrace和TraceView。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FPptzDmu-1648367295441)(https://upload-images.jianshu.io/upload_images/24944255-a718b7bafbc35a7c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

二、布局检测与优化

  • 布局层级优化
    程序的每个组件和 Layout 都需要经过初始化、布局和绘制,如果布局嵌套层次过深,就会导致加载操作更为耗时,更严重的话还可能导致内存溢出。本节学习使用两个工具来检查和优化 Layout。

  • 过度渲染
    既然能够通过系统设置知道过度渲染次数,测试时候就读取该值,填写报告就完了啊,为何要自动化呢?因为在对app进行系统的测试时,会发现页面非常多,如管家一二级页面就多大20多个,且集成包,灰度包,正式包,回归包都要进行一次测试,所以进行自动化过度渲染计数读取是有必要的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CPcxdE1m-1648367295441)(https://upload-images.jianshu.io/upload_images/24944255-e06573e0d3a1455e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

三、内存优化

由于Android应用的沙箱机制,每个应用所分配的内存大小是有限度的,内存太低就会触发LMK(Low Memory Killer)机制,进而会出现闪退现象。如果要对内存进行优化,就需要先搞懂java的内存是如何分配和回收的,关于这方面,可以重点参考下面的内容:

主要包含

  • 内存抖动和内存泄漏
  • 内存大户,Bitmap内存优化
  • Profile内存监测工具
  • Mat大对象与泄漏检测

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B1nNOGEP-1648367295442)(https://upload-images.jianshu.io/upload_images/24944255-e35512eabc26a7ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

四、耗电优化

如果一个app使用的很少,但是app的耗电量却很高,这时候用户肯定想直接卸载这个app。那么如何降低自己app的耗电量就是一个很重要的事情了。

耗电的因素有那些呢?

(1)Alarm Manager wakeup 唤醒过多
(2)频繁使用局部唤醒锁
(3)后台网络使用量过高
(4)后台 WiFi scans 过多

详细内容包含

  • Doze&Standby
  • Battery Historian
  • JobScheduler、WorkManager

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AVkZANXK-1648367295443)(https://upload-images.jianshu.io/upload_images/24944255-1cbbe1fb1845965e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

五、网络传输与数据存储优化

  • google序列化工具protobuf
  • 7z极限压缩

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ECmg37Wz-1648367295443)(https://upload-images.jianshu.io/upload_images/24944255-0fcfdc443aaa4f14.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

六、APK大小优化

让我们的apk文件尽可能更小,移除那些未使用的代码和资源文件,节省下载和提高效率。

  • APK瘦身
  • 微信资源混淆原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQzC73nY-1648367295445)(https://upload-images.jianshu.io/upload_images/24944255-afb7628ec9aaad3b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

优秀开源项目:

  • ali1024.coding.net/public/P7/Android/git

  • github.com/android

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0q04Ro2-1648367295445)(https://upload-images.jianshu.io/upload_images/1095900-4bc8337d3615bf27.png?imageMogr2/auto-orient/strip|imageView2/2/w/530/format/webp)]

【Android高级架构视频学习资源】

**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值