kolin高德地图内存泄漏

背景

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

发生内存泄漏概览

kolin高德地图内存泄漏_第1张图片
内存泄漏,发生时间,退出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高德地图内存泄漏)