android中内存泄露,内存溢出,内存优化的一些理解及心得

最近参加了两轮面试,一个视频面试,一个电话面试,经过这两轮面试后突然像给我打了镇静剂一样。两个字总结:悲惨

     下面我说说我在面试中被问到的问题,答案我就不一一列出了。(pass,有的目前都没弄出答案)

 1:URM理解

 2:android字体为什么要用sp而不用dp

 3:两个Activity,A与B,B在A上面,如果在A的destory()方法里面做耗时操作会内存泄露吗?

 4:app启动优化

 5:  java中A,B两个类相互持有引用会内存泄露吗?

 6:  Fragemnt,activity生命周期,fragment使用中app锁屏后打开出现空白.

 7:  constraintlayout的优点与缺点

 8:  谈谈接触的跨线程,跨进程通讯。以及handler原理

 9:  项目中用到的设计模式

10: 被static修饰的类,方法,属性有什么特点,什么时候被销毁

11: 谈谈内存优化

   大体我记住的就这些。有的印象不是很深刻了,其实可以看出来,很多都是面我们对内存泄露,内存优化的理解,其实对于内存泄漏,内存溢出,内存优化我们做android的来说肯定都不陌生,而且面试几乎都会问到,只是问题灵活度不一样。

内存泄露:就是有的对象再使用后,被其他对象所持有引用导致无法被GC回收器回收了(不需要再使用),就会产生内存泄露.

内存溢出(OOM):系统分配的内存,不足支撑我们需要的内存。也就是我们需要的内存大于系统分配的内存。从定义上面我们就可以想到,过多的内存泄露就会导致内存溢出(OOM).

内存优化:就是布局优化+内存溢出优化+图片优化

上面可以看到内存泄露,内存溢出,内存优化的定义,下面我就列出几种例子:

一(内存泄露)

1.hadnler机制导致的内存泄露(属于非静态内部类导致内存泄漏一种)

代码我就不列出了,我想是个做android的都会handler机制,handler是属于内部类,他持有外部类(activtiy的引用),而我们message是通过handler.sendmessage(),因此message也持有handler引用,我们接收的消息都是通过轮询获得handlermessage调用.此时当我们finish当前activity,但是sendmessage有10个,并没有接收完成,而handler又持有activity引用,导致GC无法回收activtiy-内存泄露

2.单例模式

我们在开发项目的时候都会用到单例模式来创建一些经常用到的对象,而我们也知道单例模式都是通过static修饰的静态方法获得的,static修饰的静态方法生命周期跟应用程序及application一样。此时如果我们在获取单例模式中构造函数传入activtiy,当activtiy销毁的时候而此时静态方法还持有activity的引用导致gc无法回收activtiy-内存泄露

3.MVP

MVP也是一种设计模式:具体怎么设计都是看个人,我这里说的是我个人的MVP模式,我通常在v中实例化M中接口的实现类,因此也相当于m中接口的实现类在V中相当于非静态内部类了,并持有外层activity引用,当我们finish当前activity,然而在M层中做了耗时操作,此时M层中又持有activity的引用导致GC无法回收-内存泄漏.....这种情况你可以马上调试下,如果你项目中存在fragment实现的tab,你快速切换不是相邻的两个tab,这两个tab每次切换都有网络请求,你就会发现内存泄露,甚至内存溢出(oom).

还有,静态变量,资源未回收也会导致内存泄露。

二(内存溢出)

1.在ac或者ft销毁的时候没有对资源,流操作等释放

2.broadcastrecivier,eventbus等取消注册,

3.加载图片,布局的时候要进行优化

三(内存优化)

其实我总结就是:内存泄露,图片加载,布局优化

 

写在最后:给我感觉现在android面试基本上就是java知识面试,有时候你可能都不是很清楚hr的问题,或者说不明白他到底要问什么。然后经过这两轮面试我给自己总结出了几个失败原因:

 1.java基础知识太差

 2.面试前没复习

 3.没有深入理解内存相关知识

 4.知识面太单一(这个是科大讯飞面后感)

最后推荐大家一篇比较详细的文章:https://www.jianshu.com/p/ab4a7e353076,欢迎各位android爱好者加群交流:290611780

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值