内存泄漏解决方式

  1. 避免 static Activity activity;   这样的代码,或在销毁时置为null
  2. 单例模式中Singleton的getInstance()方法时传入的context尽量传入context.getApplication(因为单例的生命周期为应用生命周期)
  3. 避免 static Views ;这样的代码,或在销毁时,置为null
  4. 内部类解决内存泄漏方式:1.内部类改为静态内部类,匿名内部类改为静态匿名内部类,,,,2.如果有强引用Activity中的属性,则将该属性的引用方式改为弱引用,,,,,3.在业务允许的情况下,在Activity执行onDestroy时,结束这些耗时任务
  5. Handler内存泄漏解决方式:1.把Handler类放在单独的类文件中,或者使用静态内部类便可以避免泄漏,,,,,,2.如果想在Handler内部去调用所在的Activity,那么可在Handler内部使用弱引用的方式指向所在Activity,那么可以在handler内部使用弱引用的方式去指向所在Activity,使用static+weakReference的方式达到断开Handler与Activity之间存在引用关系的目的。,,,,,,3.在界面销毁时,释放handler资源(置null)
  6.       最主要原因为线程的生命周期不可控,若线程为Activity的内部类,MyThread中将保存了Activity的一个引用,当MyThread的run函数没有结束时,MyThread是不会被销毁的,因此它所引用的老的Activity也不会被销毁,因此出现了内存泄漏问题。                                                                                                                                      解决方式::::::1.传入Application的context,因为Application的生命周期就是整个应用的生命周期。,,,,,,,,2.如果此时传入的为activity的context,当这个context所对应的activity退出时,主动结束执行的任务,并释放activity资源,,,,,,,3.将线程的匿名内部类改为静态内部类,,,,,,,,,,4.如果需要引用activity,使用弱引用,,,,,,,,,,,5.谨慎对cpntext使用static
  7. bitmap没调用recycle()      bitmap对象在不使用时,我们应该先调用recycle()释放内存,然后才设置为null
  8. 集合中对象没有清理造成的内存泄漏,,,,集合中引用了一些对象,不需要时没有将其清理掉,这样集合会越来越大,若集合为static 会更严重,,,,,解决方法:::在activity退出时,将集合里的东西clear,然后置null,再退出程序
  9. 注册没取消造成的内存泄漏,,,,因为其他的一些Android程序可以引用系统的Android程序的对象(如注册机制),即使Android程序已经结束,但别的应用程序仍然还有对Android程序的某个对象的引用,泄漏的内存依然不能被垃圾回收。             解决方式:::1.用ApplicationContext代替ActivityContext,,,,,,2.在activity执行onDestroy时,调用取消注册
  10. 资源对象没关闭造成的内存泄漏,资源对象(Cursor,File文件等)往往都用了一些缓存,在不使用时,及时关闭即可。
  11. 占用内存较多的对象(图片过大)造成内存溢出,,,,,,安卓分给bitmap的大小仅为8M,解决方式。。。。。。1.等比例缩小图片,,,,,,2.对图片采用软引用,及时地进行recycle()操作并置null
  12. WebView内存泄漏(影响较大):::解决方式:::用新的进程起含有WebView的Activity的onDestroy()最后加上System.exit(0);杀死当前进程

http://tryenough.com/android-momeryleak

https://blog.csdn.net/qq_35373333/article/details/74909811

 

猜你喜欢

转载自www.cnblogs.com/acg88688/p/11870583.html