内存溢出与内存泄漏

来源:互联网 发布:大数据4v 编辑:程序博客网 时间:2024/06/06 04:47

内存泄漏

内存泄漏就是我们所说的,当我们的对象在堆内存中,对象不可达的时候,但是别的对象还持有他的引用,从而造成内存Gc机制无法回收。大致在Android中主要就是分为生命周期不一致造成的。还有一点就是内部类造成的内存泄漏。

1.Handler造成的内存泄漏
就是比如你点击一个按钮,发送Handler的消息,但是还没有发送出去,用户销毁了当前的Activtiy。去寻找当前Handler的对象时,发现他已经被销毁了。所以造成的内存泄漏。

2.WebView造成内存泄漏
Android混合开发时经常用到WebView加载html等页面,而WebView的内存泄漏就是最经常遇到的问题,尤其是当项目中需要用webview加载的页面比较多时。webview下面的callback持有activity引用,造成webview内存无法释放。这个关于WebView的http://blog.csdn.net/xygy8860/article/details/53334476

3.单利模式造成的内存泄漏等
在我们使用单利模式的时候,会传入一个上下文。这个上下文如果传入的是一个Activity的上下文就会造成内存泄漏。因为单利模式是在全局只有一个对象,他是整个项目的生命周期。所以传入上下文是我们的应该是使用的Application的上下文。

4.ViewHolder造成的内存泄漏
ViewHolder造成的内存泄漏主要就是,内部类持有外部类的引用。一般我们不会在ViewHolder中做耗时操作,万一,可能,就有些需求会呢。。就是非静态内部类造成的内存泄漏,像这种情况就是前面添加上static。

内存溢出

在我们安卓中平均分配内存就是16M,当我们的超过他时虚拟机不会给我们在去分配内存,造成的内存溢出。

内存溢出大部分就会出现在图片上造成的内存溢出。像在项目中使用的Bitmap用完一定要释放,一定要释放,一定要释放。他是非常消耗我们Android的内存的。但是如何优雅的使用我们的Bitmap,就是通过二次采样与质量压缩。在我们的项目中需求不同从而采用不同的方案。关于这方面还有一个LruCache的算法。想了解的话(最近最少使用算法)。
http://blog.csdn.net/qq_39238370/article/details/78067066

原创粉丝点击