美文网首页
Android——内存泄漏

Android——内存泄漏

作者: 遥遥的远方 | 来源:发表于2018-01-24 14:44 被阅读0次

    性能优化----内存泄漏优化

    一:什么是内存泄漏:内存不再GC的掌控之内了

    • 了解几个问题

      (1) 垃圾回收机制 GC(顾客就是对象,餐具就是开发的代码,服务员GC)

    总结:Java的GC内存回收机制,某对象不再有任何的引用的时候才会进行回收。

    GC的原理:可以作为GC Root引用的对象

    • 1.JavaStack中的引用的对象。

    • 2.方法区中静态引用指向的对象

    • 3.方法区中常量引用指向的对象

    • 4.Native方法中JNI引用的对象

    • 5.Thread==“活着的”线程

    image

    (2)怎么判断一个对象是垃圾对象?
    这是一个主观的判断。

    内存泄漏对了容易导致OOM-----内存溢出,app会崩溃。

    二:确定我们项目当中或者某几个类里面是否存在内存泄漏。

    粗略判断内存泄漏-----Android Monitors--->System Informatoon ---->MemoryIsage查看Obejcts里面是否有 没有被释放的Views或者Activity。
    命令行模式:adb shell dumpays meminfo 包名 -d

    三:确定内存泄漏的大致范围:

    1.Android studio方式:看Memory Monitors工具。

    检查activity一个一个的动作(比如Activity的跳转)

    反复多次执行摸一个操作,不断的通过这个工具查看内存的大概变化的情况,前后观察两个内存变化情况。

    四:更仔细的查找内存泄漏的位置。

    在AS里面使用Head Snapshot工具(堆栈快照)

    五:使用更高级的分析工具具体找到内存泄漏的根源(工具 MAT)

    • 1.单例模式

    • 2.安卓输入法系统存在内存泄漏(基本原因就是inputMethodManager持有了EditText的引用,进而持有了activity的引用导致的内存泄露)

    注: 通过传入ApplicationContext使editview和activity解除绑定,再通过发射使editviews所持有的父view为null,这样就解决了activity的内存泄露,但这种方法有一个问题,字体颜色会变成白色,所以要自己添加颜色,在华为手机测试内存不泄露,只是editview本身释放不掉,但activity没有泄露,这种方法可以接受。

    相关文章

      网友评论

          本文标题:Android——内存泄漏

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