我怀疑可能有内存泄漏。因为ServerManager将保存回调链接,而此回调将保存激活链接。这段代码中会有内存泄漏吗?
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会保留到片段的链接吗?如何做得更好?
发布于 2019-07-09 14:02:02
如果ServerManager是单例,则肯定存在上下文泄漏:它包含对Update实例的引用,该实例(作为非静态内部类)包含对声明该实例的活动的引用。
解决办法的例子可以是:
ServerManager添加一个注销方法,并从对称生命周期回调调用它(onDestroy表示onCreate,onStop表示onStart,.)https://stackoverflow.com/questions/56948833
复制相似问题