您的位置:首页 > 移动开发 > Android开发

经常导致内存泄漏的一些原因

2016-04-12 11:54 281 查看
android 内存泄漏:keeping a long-lived reference to a Context.持有一个context的对象,从而gc不能回收。

MyApplication类的作用是为了放一些全局的和一些上下文都要用到变量和方法之类的

一个View,的作用域超出了所在的Activity的作用域
比如一个static的View或者把一个View cache到了application当中 etc

某些与View关联的Drawable的作用域超出了Activity的作用域。
Runnable对象
比如在一个Activity中启用了一个新线程去执行一个任务,在这期间这个Activity被系统回收了,但Runnalbe的任务还没有执行完毕并持有Activity的引用而泄漏,但这种泄漏一般来泄漏一段时间,只有Runnalbe的线程执行完闭,这个 Activity又可以被正常回收了。

内存类的对象作用域超出Activity的范围
比如定义了一个内存类来存储数据,又把这个内存类的对象传给了其它Activity 或者Service等。因为内部类的对象会持有当前类的引用,所以也就持有了Context的引用。
解决方法是如果不需要当前的引用把内部类写成 static或者,把内部类抽取出来变成一个单独的类,或者把避免内部对象作用域超出Activity的作用域。

通过Application在两个Activity间传递数据,记得数据传递完成之后,把存放在application的HashMap中的数据remove掉

out Of Memery Error 在android中每一个程序所分到的内存大小是有限的,如果超过了这个数就会报Out Of Memory Error。android给程序分配的内存大小与手机硬件有关,以下是一些手机的数据:
G1:16M 
Droid:24 
Nexus One:32M 
Xoom:48Ms

所以尽量把程序中的一些大的数据cache到本地文件。以免内存使用量超标。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  内存泄露 android