一 .java内存泄漏基础知识
- java内存的分配策略: a. 静态存储区. b. 栈分配 C.堆分配.
- java如何管理内存:new , GC 完成.

- java中的内存泄漏: 内存泄漏是指无用对象(不再使用的对象)持续咱有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄漏
二 .android中的内存泄漏
- 单列模式: 单列模式时因为是静态对象且生命周期是app的生命周期,所以在引用context的时候,不能使用Activity的 context. 应该使用context.getApplicationContext() app的context. 如果使用Activity作为单列模式的context,那么在回收Activity时候,由于静态的对象持有Activity的引用,所以Activity得不到回收.
匿名内部类: 非静态的内部类间接的引用了外部类, 修改方法把内部类修改成静态的内部类.
// static class TestResource {
// private static final String TAG = "";
// //...
// }
Handler:
// private Handler mHandler = new Handler\(\) { // @Override // public void handleMessage\(Message msg\) { // //... // } // }; 这种写法也是非静态的内部类间接的对外部内进行了引用,同时如果message循环里面还有未处理完的消息,那么就可能造成内存泄漏.修改成如下方法:内部修改成静态内部类,同时内部类持有外部内的弱引用,再Activity onDestory的时候remove 消息.
避免使用static变量: static变量的生命周期是和app的生命周期一样的,所以尽量少用static变量,减少内存的使用。如果在内存紧张的情况下,系统会优先的杀死那些后台占用内存大的APP.
资源未关闭造成的内存泄漏: cursor, 文件资源.
AsyncTask造成的内存泄漏:
同Handler一样,修改成静态的内部类,在Activity的onDestory时候调用cancel方法.- Bitmap的时候,C部分内存,调用recycle方法。