1.集合类泄漏
集合如果只有添加元素的方法,没有相应的删除机制,就会到之后内存被占用。
如果这个集合是全局的变量,没有相应的删除机制,就会导致集合占用的内存只增加不减。
2.单例造成的内存泄漏
单列的静态特性的生命周期和应用的生命周期一样长,如果使用不恰当,就会造成内存泄露。
3.匿名内部类/非静态内部类和异步线程
非静态内部类创建静态实例造成的内存泄漏
4.匿名内部类
Android 开发经常会继承继承实现activity、fragment、view,如果使用了匿名类,就异步线程持有,没有任何措施就会内存泄漏。
5.Handler 造成的内存泄漏
handler、message和messageQueue都是相互关联在一起的,万一handler发送的message没有被处理,
message和发送的handler对象被线程messagequeue一直持有。handler属于tls变量,生命周期和view,activity是不一致的,
导致无法正常释放。
6.尽量避免使用 static 成员变量
如果你的app进程设计上是长驻内存的,那即使app切到后台,这部分内存也不会被释放。按照现在手机app内存管理机制,
占内存较大的后台进程将优先回收,yi'wei如果此app做过进程互保保活,那会造成app在后台频繁重启。
当手机安装了你参与开发的app以后一夜时间手机被消耗空了电量、流量,你的app不得不被用户卸载或者静默。
7.避免 override finalize()
8.资源未关闭造成的内存泄漏
对于使用了BraodcastReceiver,ContentObserver,File,游标 Cursor,Stream,Bitmap等资源的使用,
应该在Activity销毁时及时关闭或者注销,否则这些资源将不会被回收,造成内存泄漏。
9.一些不良代码造成的内存压力