内存泄漏和内存溢出
概念
- 内存泄漏:垃圾回收器无法回收原本应该被回收的对象,这个对象就引发了内存泄露。
- 内存溢出:过多的内存泄露最终会导致内存溢出(OOM)
如何避免内存泄漏的情况
- 无用连接及时关闭,Cursor,InputStream..
- static对象的生命周期过长,应该谨慎使用
- 在处理一些占用内存大而且声明周期较长的对象时候,可以尽量应用软引用和弱引用技术。
- 不要使用String进行字符串拼接,使用StringBuffer或者StringBuilder代替String,可以在一定程度上避免OOM和内存抖动。
- 不要使用Enum
- ...
Handler会不会造成内存泄漏
Handler 的使用造成的内存泄漏问题应该说是最为常见了,很多时候我们为了避免 ANR 而不在主线程进行耗时操作,在处理网络任务或者封装一些请求回调等api都借助Handler来处理,但 Handler 不是万能的,对于 Handler 的使用代码编写一不规范即有可能造成内存泄漏。另外,我们知道 Handler、Message 和 MessageQueue 都是相互关联在一起的,万一 Handler 发送的 Message 尚未被处理,则该 Message 及发送它的 Handler 对象将被线程 MessageQueue 一直持有。
由于 Handler 属于 TLS(Thread Local Storage) 变量, 生命周期和 Activity 是不一致的。因此这种实现方式一般很难保证跟 View 或者 Activity 的生命周期保持一致,故很容易导致无法正确释放。
事件分发
图片三级缓存
- 网络加载,不优先加载,速度慢,浪费流量
- 本地缓存,次优先加载,速度快
- 内存缓存,优先加载,速度最快
如果内存不足,是怎样去清理图片呢 我当时就知道个LRUCache,这块后续更新,自己还没细看过
适配
一张200*200的图片,第一次放在hdpi 第二次放在xdpi 第三次放在xxxdpi ,跑在小米6手机上,三种效果是怎样的?为什么会这样
ListView
- 怎么实现类似qq分组效果,我当时说根据不同的ViewType加载不同的布局。
- 如果用ListView嵌套ListView实现,公用一个adapter,怎么区分点击的是组的Item还是里面的子Item,这个当时没想出来,知道的麻烦告诉下,谢谢啦
约束布局
- 有没有用过约束布局?
- 好在哪?
网友评论