OOM层出不穷,这篇《Android 性能优化实战篇》助你直击命门

在这里插入图片描述

在性能优化中,大家可能会比较关注UI界面优化、耗损(电量,流量)优化,但其中内存优化才是命门所在。很多时候由于项目需要,大家都是拼命的加班加点的赶进度,为了追求效率很多代码可能就写的不(放)够(飞)规(自)范(我),从而造成内存泄漏,在试运行阶段bug不断OOM层出不穷。

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

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

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

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

  • 线程造成的内存泄漏

    //——————test1
            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性能优化-实战全解析》。

由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要《Android 性能优化实战》及360°全方面性能调优完整文档的可扫描下方卡片获取!

《Android 性能优化实战篇》

目录

在这里插入图片描述

1. 腾讯Bugly—对字符串匹配算法的一点理解
2. 爱奇艺技术产品团队—干货|安卓APP崩溃捕获方案——xCrash
3. 字节跳动技术团队— 深入理解Gradle框架之一:Plugin, Extension, buildSrc
4. 百度APP-Android H5首屏优化实践
5. 京东技术—任意URL跳转漏洞修复与JDK中getHost()方法之间的坑
6. 支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」
7. 支付宝 App 构建优化解析:通过安装包重排布优化 Android 端启动性能
8. 支付宝 App 构建优化解析:Android 包大小极致压缩
9. 搜狐技术产品—深入理解Flutter多线程
10. 携程技术—从智行 Android 项目看组件化架构实践
11. 谷歌开发者—Flutter 您需要知道的知识点

在这里插入图片描述

12. 字节跳动技术团队—二维码扫描优化
13. 网易传媒技术团队—AOP技术在客户端的应用与实践
14. 网易大数据|互联网产品决策秘笈: AB测试
15. 高德技术—Android Native 内存泄漏系统化解决方案
16. 腾讯光影研究室—Android P之Smart Linkify
17. 百度App组件化之路
18. 百度App网络深度优化系列《三》弱网优化
19. 字节跳动技术团队—深入理解gradle框架之二:依赖实现分析
20. 美团技术团队—Probe:Android线上OOM问题定位组件

在这里插入图片描述

21. 美团技术团队—Android静态代码扫描效率优化与实践
22. 字节跳动技术团队—Scene:Android 开源页面导航和组合框架
23. 网易新闻客户端 H5 秒开优化
24. 解决支付宝包体积优化的遗留问题:运行时获取dexpc
25. Android篇 | 爱奇艺App启动优化实践分享
26. 二维码扫描优化及爱奇艺App的实践
27. 腾讯Bugly—动态下发 so 库在 Android APK 安装包瘦身方面的应用
28. 天猫精灵技术—史上最全Android渲染机制讲解(长文源码深度剖析)
29. 花椒Android端自动化测试实践
30. 百度App技术—一种简单优雅的TextView行间距适配方案

在这里插入图片描述

31. 百度App技术—Android 10分区存储介绍及百度APP适配实践
32. 抖音BoostMultiDex优化实践:Android低版本上APP首次启动时间减少80%
33. 抖音BoostMultiDex优化实践:Android低版本上APP首次启动时间减少80%(二)
34. 干货 | 携程Android 10适配踩坑指南
35. 字节跳动技术团队—抖音包大小优化-资源优化
36. 百度App技术—Gradle 与 Android 构建入门
37. 字节跳动技术团队—AwCookieManager.nativeGetCookie crash 排查
38. 开源 | BoostMultiDex:挽救 Android Dalvik 机型APP升级安装体验
39. 字节跳动技术团队—另类 BadTokenException 问题分析和解决
40. 京东—LayoutInflater原理分析与复杂布局优化实践

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值