OOM 层出不穷,这份 《Android性能优化大厂实战全解析》笔记带你直击命门

在性能优化中,大家可能会比较关注UI界面优化、耗损(电量,流量)优化,但其中内存优化才是命门所在。

内存作为程序运行最重要的资源之一,需要运行过程中做到合理的资源分配与回收,不合理的内存占用轻则使得用户应用程序运行卡顿ANR黑屏,重则导致用户应用程序发生 OOM(out of memory)崩溃。

但是很多时候由于项目需要,大家都是拼命的加班加点的赶进度,为了追求效率很多代码可能就写的不(放)够(飞)规(自)范(我),从而造成内存泄漏,在试运行阶段bug不断OOM层出不穷。

内存泄漏基本由以下原因造成:

  • 单例造成的内存泄漏:单例的静态特性导致单例的生命周期和应用的生命周期一样长,这就说明如果一个对象已经不需要使用了,而单例对象还持有该对象的引用,那么这个对象将不能被正常回收,这就导致了内存泄漏。

  • 非静态内部类创建静态实例造成的内存泄漏:在启动频繁的Activity中,为了避免重复创建相同的数据资源,就在Activity内部创建了一个非静态内部类的单例,非静态内部类默认会持有外部类的引用,而又使用了该非静态内部类创建了一个静态的实例,该实例的生命周期和应用的一样长,导致该静态实例一直会持有Activity的引用,导致Activity的内存资源不能正常回收。

  • Handler造成的内存泄漏:平时在处理网络任务或者封装一些请求回调等Api都会借助Handler来处理,对于Handler的使用代码编写一不规范即有可能造成内存泄漏。

  • 线程造成的内存泄漏:

//test2         new AsyncTask<Void, Void, Void>() {            @Override            protected Void doInBackground(Void... params) {                SystemClock.sleep(10000);                return null;            }        }.execute();//test2        new Thread(new Runnable() {            @Override            public void run() {                SystemClock.sleep(10000);            }        }).start();

异步任务和Runnable都是一个匿名内部类,因此它们对当前Activity都有一个隐式引用。如果Activity在销毁之前,任务还未完成, 那么将导致Activity的内存资源无法回收

  • 资源未关闭造成的内存泄漏:BraodcastReceiver,File,Cursor,Stream,Bitmap等资源的使用,应该在Activity销毁时及时关闭或者注销,否则这些资源将不会被回收,造成内存泄漏。

Android性能优化是一项综合性较强的工作,很多五年经验左右的Android工程师,对于性能优化相关内容都还不够熟悉,很多人都只是偶尔使用过,甚至是听说过。为了帮助大家更好地掌握性能优化技能,早日成功拥抱高薪,在这里给大家分享一份字节大佬历时三个月整理出来的《Android性能优化大厂实战全解析》,从ANR,内存优化,耗电优化,网络优化等板块,给大家带来全方位源码实操讲解!

5b09aba05dd7c2c5fe3fc27feb7e7eb8.png


腾讯团队

  • 腾讯Bugly—对字符串匹配算法的一点理解

  • 腾讯光影研究室—Android P之Smart Linkify

  • 腾讯Bugly—动态下发 so 库在 Android APK 安装包瘦身方面的应用

  • QQ音乐—彻底弄懂浏览器缓存策略

  • QQ音乐Android编译提速之路

  • 全民k歌适配arm64-v8a方案

  • 全民K歌内存篇1——线上监控与综合治理

  • 全民K歌内存篇2——虚拟内存浅析

  • 全民K歌内存篇3——native内存分析与监控

  • ............

233428381a5a37bedd874179639efa3e.png


字节跳动团队

  • 字节跳动技术团队— 深入理解Gradle框架之一:Plugin, Extension, buildSrc

  • 字节跳动技术团队—二维码扫描优化

  • 字节跳动技术团队—深入理解gradle框架之二:依赖实现分析

  • 字节跳动技术团队—Scene:Android 开源页面导航和组合框架

  • 字节跳动技术团队—抖音包大小优化-资源优化

  • 字节跳动技术团队—AwCookieManager.nativeGetCookie crash 排查

  • 字节跳动技术团队—另类 BadTokenException 问题分析和解决

  • 字节跳动—Android Camera内存问题剖析

  • 抖音BoostMultiDex优化实践:Android低版本上APP首次启动时间减少80%

  • 抖音BoostMultiDex优化实践:Android低版本上APP首次启动时间减少80%(二)

  • 抖音 Android 性能优化系列:Java 内存优化篇

  • ...........

1843a360312c7e45601eeb4d637670d0.png


阿里团队

  • 支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」

  • 支付宝 App 构建优化解析:通过安装包重排布优化 Android 端启动性能

  • 支付宝 App 构建优化解析:Android 包大小极致压缩

  • 解决支付宝包体积优化的遗留问题:运行时获取dexpc

  • 闲鱼技术—曾梦想 if-else 走天涯?看看“责任树模式”优化

  • 闲鱼如何在2个月内实现Android启动速度翻倍的?

  • 高德技术—Android Native 内存泄漏系统化解决方案

  • 天猫精灵技术—史上最全Android渲染机制讲解(长文源码深度剖析)

  • ......

312623b7cf15b4faeaf41db15435ab98.png


百度团队

  • 百度APP-Android H5首屏优化实践

  • 百度App技术—一种简单优雅的TextView行间距适配方案

  • 百度App技术—Android 10分区存储介绍及百度APP适配实践

  • 百度App技术—Gradle 与 Android 构建入门

  • 百度App组件化之路

  • 百度App网络深度优化系列《三》弱网优化

  • ......380c8e9e18bcff8a2159effbcaf2b9df.png


网易团队

  • 网易新闻客户端 H5 秒开优化

  • 网易新闻构建优化:如何让你的构建速度“势如闪电”

  • 网易传媒技术团队—AOP技术在客户端的应用与实践

  • 网易大数据|互联网产品决策秘笈: AB测试

  • ......257078f36134ec791e27d30c8787cc41.png


美团团队

  • 美团技术团队—Android静态代码扫描效率优化与实践

  • 美团技术团队—Probe:Android线上OOM问题定位组件

  • 美团技术团队—移动端UI一致性解决方案

  • 美团—设计稿(UI视图)自动生成代码方案的探索

  • …...55b3a07b11cc028742f203f227bf5ba3.png

微信长按下方二维码

免费领取完整版

【Android性能优化大厂实战全解析】

3582d778cb4f2107bf475e63e950eaa3.png

PS:为了帮助大家更好地掌握内存优化的原理,成为真正的中高级Android开发者,我们特邀Alvin&Lance两位资深大咖为大家带来《Android稳定性持续提升,从Java到Native Hack的稳定性判定方案》直播分享,带你深入解析Idle状态下的内存泄露自动捕获方案原理以及Java与Native的内存稳定性低损耗监控原理。

a0744790e8c86e2d2e2fc40b1f3c3da4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值