关于Android面试中如何应对内存优化

很多Android的小伙伴们在面试中都会被面试官问到如何处理内存优化,那么应该如何答复面试官呢,本文就来讲讲如何来介绍Android中遇到的内存优化,让你轻松笑对面试。 
大家先看下面的我总结的思维导图: 
这里写图片描述

从上面的思维导图我们可以大致的了解内存优化所包含的大致内容,朋友们,面试中的语言要简单、扼要、分清楚主次矛盾,要引导面试官的思维,把他的思维带到你的知识鸿沟里。那么如何作答呢?其实答案就是按照我们的思维导图来介绍,内存优化分为:【一个本质和三个知识点】 
本质:对象的引用未被释放,导致对象本身无法被有效的回收。 
三个知识点:内存泄漏、内存溢出、内存优化工具。

这个时候面试官就被你带沟里了,他就会让你逐个介绍这三个知识点了。 
【内存泄漏】 
1.单例模式引发的内存泄漏: 
原因:单例模式里的静态实例持有对象的引用,导致对象无法被回收,常见为持有Activity的引用 
优化:改为持有Application的引用,或者不持有使用的时候传递。

2.集合操作不当引发的内存泄漏: 
原因:集合只增不减 
优化:有对应的删除或卸载操作

3.线程的操作不当引发的内存泄漏: 
原因:线程持有对象的引用在后台执行,与对象的生命周期不一致 
优化:静态实例+弱引用(Weakrefrence)方式,使其生命周期一致

4.匿名内部类/非静态内部类操作不当引发的内存泄漏: 
原因:内部类持有对象引用,导致无法释放,比如各种回调 
优化:保持生命周期一致,改为静态实例+对象的弱引用方式(WeakReference)

5.常用的资源未关闭回收引发的内存泄漏: 
原因:BraodcastReceiver,File,Cursor,IO流,Bitmap等资源使用未关闭 
优化:使用后有对应的关闭和卸载机制

6.Handler使用不当造成的内存泄漏: 
原因:Handler持有Activity的引用,其发送的Message中持有Handler的引用,当队列处理Message的时间过长会导致Handler无法被回收 
优化:静态实例+弱引用(Weakrefrence)方式 
销毁对象时候清空队列里的Message

内存溢出: 
原因: 
1.内存泄漏长时间的积累 
2.业务操作使用超大内存 
优化: 
1.调整图像大小后再放入内存、及时回收 
2.不要过多的创建静态变量

内存优化工具: 
Square:LeakCanary、MAT等

小伙伴们注意了,在面试的时候千万不能按照上面的逐条背,否则你会被认为为是毕业生的水准,要用一种比较随意、脱口而出的语态来介绍。 
例如以下的表达方式:关于内存泄漏,一般像单例模式的使用不当啊、集合的操作不当啊、资源的缺乏有效的回收机制啊、Handler、线程的使用不当等等都有可能引发内存泄漏。 
这时,面试官就会抽查里面他所感兴趣的知识点,当然,既然你懂,你就牵着他走了,你把原因和解决方案都给他说一下,直击其内心,通过一两个问题,你已经在他内心深处建立了良好的形象,自然接下来他就不会刻意刁难你了。

当然,这里只是为了应付与面试官的沟通提供一种思路,至于详细的知识点需要各位同学对思维导图里的知识点查阅专家博客等相关资料逐个击破,只有做到心中有剑,才能做到斩杀面试官于无形。 
接下来作者会把知识点逐个展开,用代码解释:是什么、为什么、怎么样。欢迎大家持续关注~

猜你喜欢

转载自blog.csdn.net/zhang1223665986/article/details/80725765