kolin高德地图内存泄漏

作者: 上门女婿联盟 | 来源:发表于2017-11-28 17:18 被阅读350次

    背景

    1. 使用kotlin开发Android App
    2. 集成高德地图
    3. 按照文档在集成的Fragment中onDestory等方法进行高德地图相关释放操作

    发生内存泄漏概览

    内存泄漏,发生时间,退出MainActivity即整个App

    解决方法

    1. 找到图中对应的自己编写的部分 即HomeFrgment的Setting字段
    2. 查看Setting字段的生命及使用情况
      lateinit var settings: UiSettings
    3. 修改为
      private var settings: UiSettings ?= null

    原因

    1. kotlin是一门空安全语言使用 lateinit var 声明变量,其意义为延迟加载,所声明的变量不可置为null
    2. 使用ButterKnife时由于有大量如下语法 ,认为可以取代?=null的写法所以出错,实质上?=null和在java中声明一个变量不赋值是等效的
      @BindView(R.id.around_button)
      lateinit var aroundButton: ImageButton
    3. mapview持有settings而setting不能null导致无法被GC回收,所以内存泄漏

    建议

    1. 生命周期敏感组件尽量使用java开发
    2. 如果使用kotlin尽量少使用late var,宁可多些空校验(!!)

    参考

    [一个歪国人的github]https://github.com/bluelinelabs/Conductor/issues/234

    相关文章

      网友评论

        本文标题:kolin高德地图内存泄漏

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