经常导致内存泄漏的一些原因
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到本地文件。以免内存使用量超标。
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到本地文件。以免内存使用量超标。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories