美文网首页Android开发经验谈Android技术知识Android开发
内存泄漏 - 用白话解释Android常见内存泄漏之一

内存泄漏 - 用白话解释Android常见内存泄漏之一

作者: zhongjh | 来源:发表于2023-04-12 10:16 被阅读0次

如果你们有用第三方库检测泄漏,经常出现一种因为自定义的Callback或者Listener引起的泄漏。

那么这篇文章就是用白话解释为什么会存在这种泄漏,以及如何解决

一:为什么存在这种泄漏?

大家都知道,java会自动释放对象 内存,但是如果该对象一直被别的对象持有,那么该对象是不会自动释放的,当该对象在不停的创建后,然后中间一直没有释放出来,就会导致内存溢出,这就是内存泄漏的问题。

像这种内存很大的问题往往是Activity对象,因为Activity的Callback或者Listener对象,被别的全局类持有着,当Activity对象关闭后,但是Activity的Callback对象依然被别的全局类持有着,所以导致不会自动释放Activity,然后该Activity不停的打开关闭打开,就会产生内存溢出。

二:如何解决?

其实很简单,就是在该Activity关闭后,把该Activity的Callback对象设置为null即可,原理很简单,因为Callback为null了后面会自动被释放,而Activity没有任何对象被别的全局类持有,所以Activity后面也会被自动释放

三:例子

一个全局类(范围比Activity大)

    public void registerViewCallback(Callback callback) {
        this.callback = callback;
    }
    public void unRegisterViewCallback(Callback callback) {
        this.callback = null;
    }

Activity,不一定是onBackPressed,也可以是onDestroy,根据业务来

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        playerPresenter.registerViewCallback(this);
    }

    @Override
    public void onBackPressed() {
        playerPresenter.unRegisterViewCallback(this);
        super.onBackPressed();
    }

相关文章

网友评论

    本文标题:内存泄漏 - 用白话解释Android常见内存泄漏之一

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