大意了,又是 OOM ,Android 内存监控一定要注意这几点!(1)

方案一:线下性能监控

==========

Android Studio自身提供的MAT等工具分析内存泄漏比较耗时,因而诞生了LeakCanary——这也是现在寻找内存泄漏问题最常用的工具。

LeakCanary 这个工具非常简单,依赖 LeakCanary 库,可自动检测内存泄漏并通过通知报警,不用初始化。但是经过对它的深入分析之后,不难发现,简单的API后面藏着许多复杂的逻辑处理原理。

面试的时候,面试官也不会问“使用”相关的没有技术含量的东西,一般只会问原理,比如:

  • 1.说一下LeakCanary检测内存泄漏的原理与基本流程

  • 2.LeakCanary是如何初始化的?

  • 3.说一下LeakCanary是如何查找内存泄露的?

下面简单说一下 LeakCanary 的原理(面试必问的,建议收藏):


  • 1.监听 Activity 的生命周期;

  • 2.在 onDestroy 的时候,创建相应的 Refrence 和 RefrenceQueue,并启动后台进程去检测;

  • 3.一段时间之后,从 RefrenceQueue 读取,若读取不到相应 activity 的 Refrence,有可能发生泄露了,这个时候,再促发 gc,一段时间之后,再去读取,若在从 RefrenceQueue 还是读取不到相应 activity 的 refrence,可以断定是发生内存泄露了;

  • 4.发生内存泄露之后,dump,分析 hprof 文件,找到泄露路径(使用 haha 库分析); 5.存储结果并使用通知提醒用户存在泄漏。

这里用一张图片来直观的描述 LeakCannary 的执行流程。

其中,比较重要的是如何确定是否发生内存泄露,而如何确定发生内存泄露最主要的原理是通过 Refrence 和 RefrenceQueue。

这里只做一个总体的介绍,详细具体的流程可以往下看。

方案二:线上性能监控

==========

LeakCanary 是为线下内存泄漏 debug 而准备的,但是在实际的工作中,只知道线下性能监控是远远不够的。

如下图:

错误发生在 b.xf 第五行,导致OOM的原因,到底是此处申请了太大的内存,还是其他地方申请了太多内存导致可用内存不足亦或者程序存在内存抖动问题,导致连续内存不足,我们不得而知。

这时候线上应用性能监控的重要性就体现出来了。

如果我们能够对应用上线后的各项性能进行监控,在出现问题时能提取监控数据,从而定位到存在性能问题的地方快速解决,这不香吗?

我们通过与腾讯内部专家进行沟通知道,腾讯内部正在使用JVMTI进行线上内存监控,内存优化上,高级的JVMTI监控对象分配,然后形成日志传送到服务器端,这正是我们需要的线上监控内存的技术方案!

性能监控详解

======

用过Android和iOS的朋友应该印象比较深,相比于iOS,Android用的时间越长就会越卡。

在这个网络都追求5G了的时代,“卡”这个体验显然成为了一个极拉低印象分的问题。

不仅是阿里,还有腾讯、字节跳动、爱奇艺等大厂,小厂也是,都非常重视这个问题,在面试中,如果这个方向表现优异,你将会很值钱。

本文针对“性能优化”这个技术点,献上一份 Android性能优化的详细攻略,从各个方面对目标产品进行全方位的“优化”,让产品的性能从各个方面得到提升,希望对大家的学习和工作有所帮助。

App性能优化提要:

性能优化知识技能策略详解

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

性能优化这个点的知识要想讲明白篇幅会比较长,鉴于篇幅原因,我这里直接把详解部分整理成了一个章节,包括App启动优化、内存优化…等等一些分类完成的技术知识点。另外还有Android高级进阶必备的一些技术栈的整理。不仅仅有详细的底层原理的解析,还有专门的实践案例

需要的朋友,可以【点击此处加入】,即可查看获取这份资料的完整版;

第一章 设计思想与代码质量优化


  • 六大原则(单一职责原则、里氏替换原则、依赖倒转原则、接口隔离原则……)

  • 设计模式:结构型模式(桥接模式、适配器模式、装饰器模式、代理模式、门面(外观)模式……),创建型模式(建造者模式、单例模式、抽象工厂模式、工厂方法模式……)

  • 数据结构(数组、栈、队列、链表、树……)

  • 算法(排序算法、查找算法……)

第二章 程序性能优化


  • 启动速度与执行效率优化(冷启动和热启动解析、APP 启动黑白屏解决办法、APP 卡顿问题分析及解决方案、启动速度与执行效率优化之 StrictMode……)

  • 布局检测与优化(布局层级优化、过度渲染……)

  • 内存优化(内存抖动和内存泄漏、内存大户,Bitmap 内存优化、Profile 内存监测工具、Mat 大对象与泄漏检测、耗电优化、网络传输与数据存储优化网络传输与数据存储优化、APK 大小优化、屏幕适配……)

  • 耗电优化(Doze&Standby、Battery Historian、JobScheduler、WorkManager、)

  • 网络传输与数据存储优化(google 序列化工具 protobuf、7z 极限压缩……)

  • APK 大小优化(APK 瘦身、微信资源混淆原理……)

题外话

我们见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。

其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。

不断奔跑,你就知道学习的意义所在!

注意:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值