首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CallBacks中可能的内存泄漏

CallBacks中可能的内存泄漏
EN

Stack Overflow用户
提问于 2019-07-09 08:55:52
回答 1查看 72关注 0票数 0

我怀疑可能有内存泄漏。因为ServerManager将保存回调链接,而此回调将保存激活链接。这段代码中会有内存泄漏吗?

代码语言:javascript
复制
Ativity {
    TextView textView;
    Handler h = new MyHandler();

    interface Update{
        void update(Data data);
    }

    private Update listener = new Update() {
        @Override
        public void update(Data data) {         
                textView.setText(data.getText());               
                handler.sendEmptyMessage(100);
        }   
    }

    @Override
    public void onCreate() {
        super.onCreate();
        textView = findViewById(R.id.textView);
        ServerManager.getInstance().addCallBack(listener);//Will keep a link to the implementation of the interface
    }

     private class MyHandler extends Handler {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 100:
                    textView.setText("бла бла");
                    return;
            }
        }
    }
}

CallBack会保留到片段的链接吗?如何做得更好?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-09 14:02:02

如果ServerManager是单例,则肯定存在上下文泄漏:它包含对Update实例的引用,该实例(作为非静态内部类)包含对声明该实例的活动的引用。

解决办法的例子可以是:

  • ServerManager添加一个注销方法,并从对称生命周期回调调用它(onDestroy表示onCreateonStop表示onStart,.)
  • 使用WeakReference,它不会阻止收集引用的对象。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56948833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档