Android 几种常见的内存泄漏
2017-11-13 17:21
423 查看
内存泄漏:
指无用对象不能被GC回收,从而持续占领内存。场景:
1 . 单例:当singleton为静态变量的时候,其生命周期与APP一样长,但如果该单例中持有其他对象的引用(通常为context对象)时,便会造成该对象不能被GC,从而导致内存泄漏。改进:使用context.getApplicationContext()。
2 . 内部类:
非静态内部类默认持有一个外部类对象的引用,当内部类中声明了静态变量(生命周期与APP一样)时,便会使外部类的对象不能被GC,导致内存泄漏。改进:将内部类声明为static。
3 . handler:
错误如下:
private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // ... } };
该handler为非静态内部类,但handler的生命周期通常比activity长,所以当activity退出时不能被回收,导致内存泄漏。
改进:1. 声明为静态的。 2 . 持有activity的弱引用(WeakReference)。
3 . handler.removeCallbacksAndMessages(null) 手动结束handler。
private static class myHandler extends Handler { private WeakReference<Context> context; public myHandler(Context context){ this.context = new WeakReference<Context>(context); } @Override public void handleMessage(Message msg) { // ... } };
4 . 避免使用static变量
相关文章推荐
- Android常见的几种内存泄漏小结
- Android 常见的几种内存泄漏 - Handler
- Android几种常见的内存泄漏
- Android常见的几种内存泄漏小结
- Android 常见的几种内存泄漏 - Timer
- Android开发中比较常见的内存泄漏问题及解决办法
- android端从服务器抓取的几种常见的数据的处理方式
- Android几种常见的多渠道(批量)打包方式介绍
- Android中常见的内存泄漏
- Android中的内存泄漏(二.常见的内存泄漏及更正)
- Android性能优化之常见的内存泄漏
- Android中ListView的几种常见的优化方法总结
- Android中ListView的几种常见的优化方法
- android Intent几种常见的flags
- Android中常见的内存泄漏
- Android开发常见的Activity中内存泄漏及解决办法
- [置顶] Android开发——联系人中几种常见的mimetype、几张常见表的Uri
- Android中常见的内存泄漏
- Android性能优化之常见的内存泄漏
- Android性能优化之常见的内存泄漏