美文网首页
Android内存优化总结--内存泄漏与OOM

Android内存优化总结--内存泄漏与OOM

作者: 码农ing | 来源:发表于2021-05-30 22:23 被阅读0次

    记录分享一下周末的学习总结---Android内存优化,总结后续还会完善补充。


    内存优化分为:一个本质和三个知识点

    本质:对象的引用未被释放,导致对象本身无法被有效的回收。

    三个知识点:内存泄漏、内存溢出、内存优化工具

    【内存泄漏】

    1.单例模式引发的内存泄漏:

    原因:单例模式里的静态实例持有对象的引用,导致对象无法被回收,常见为持有Activity的引用

    优化:改为持有Application的引用,或者不持有使用的时候传递。

    2.集合操作不当引发的内存泄漏:

    原因:集合只增不减

    优化:有对应的删除或卸载操作

    3.线程的操作不当引发的内存泄漏:

    原因:线程持有对象的引用在后台执行,与对象的生命周期不一致

    优化:静态实例+弱引用(Weakrefrence)方式,使其生命周期一致

    4.匿名内部类/非静态内部类操作不当引发的内存泄漏:

    原因:内部类持有对象引用,导致无法释放,比如各种回调

    优化:保持生命周期一致,改为静态实例+对象的弱引用方式(WeakReference)

    5.常用的资源未关闭回收引发的内存泄漏:

    原因:BraodcastReceiver,File,Cursor,IO流,Bitmap等资源使用未关闭

    优化:使用后有对应的关闭和卸载机制

    6.Handler使用不当造成的内存泄漏:

    原因:Handler持有Activity的引用,其发送的Message中持有Handler的引用,当队列处理Message的时间过长会导致Handler无法被回收

    优化:静态实例+弱引用(Weakrefrence)方式

    销毁对象时候清空队列里的Message

    【内存溢出】

    原因:

    1.内存泄漏长时间的积累

    2.业务操作使用超大内存

    优化:

    1.调整图像大小后再放入内存、及时回收

    2.不要过多的创建静态变量

    【优化工具】

    LeakCanary(Activity内存泄漏)

    Profiler(内存泄漏、内存抖动、应用卡顿等)

    相关文章

      网友评论

          本文标题:Android内存优化总结--内存泄漏与OOM

          本文链接:https://www.haomeiwen.com/subject/vggmsltx.html