前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >内存优化实战

内存优化实战

作者头像
提莫队长
发布2020-09-10 00:03:31
6260
发布2020-09-10 00:03:31
举报
文章被收录于专栏:刘晓杰刘晓杰

最近,因为项目时间不紧的原因,就对项目的某些页面进行了内存观察,发现了两处优化点.特意记录下来

1.单例引发的内存泄漏

我在项目中涉及到的一个单例是这样的

代码语言:javascript
复制
object LiveCenter {
    ......
    var function: Function1<Boolean, Any>? = null

    fun registerListener(function: Function1<Boolean, Any>?) {
        this.function = function
    }
    ......
}

LiveCenter 注册了一个监听.这个 Function1 是在 Fragment 中 new 了一个实例.这个时候 LiveCenter 就持有了 Fragment 的引用导致内存泄漏.所以需要写一个 release 方法,在 release 方法中使 function = null 这个和常说的 Context 引发内存泄漏其实差不多.这个可以通过 Android Studio 自带的 Android Profiler.具体用法自己搜吧

2.Fragment 作为 Listener 引发的内存泄漏

有的时候为了方便我们会这么写

代码语言:javascript
复制
public class Instance {
    public Instance(Listener listener) {
        this.listener = listener;
    }
}

public class FragmentA extends BaseFragment implements Listener {
}

这么写很常见,如果只是 FragmentA 每 new 一次, Instance 也 new 一次.那么就没啥问题.但如果 FragmentA 对应的 Activity 是 SingleTask 模式.也就是说 FragmentA 可能会多次整个刷新,导致了每次都 new Instance.每次 new 就多了一个引用导致内存泄漏.所以在这种情况下一定要注意把那个 listener 置为 null

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.单例引发的内存泄漏
  • 2.Fragment 作为 Listener 引发的内存泄漏
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档