kolin高德地图内存泄漏

背景

  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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容