Java 为什么接收器保留我的对象?
每次我在MyObject的实例上调用myMethod时,都会分配一个新实例,并且在myMethod结束后不会进行GC 我已经为此挣扎了几个小时,我错过了什么Java 为什么接收器保留我的对象?,java,gson,Java,Gson,每次我在MyObject的实例上调用myMethod时,都会分配一个新实例,并且在myMethod结束后不会进行GC 我已经为此挣扎了几个小时,我错过了什么 public class MyObject { public String tag = "myTag"; private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onRecei
public class MyObject {
public String tag = "myTag";
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
...
}
};
public MyObject() {
LocalBroadcastManager.getInstance(context).registerReceiver(mReceiver,
new IntentFilter("TEST_NOTIFICATION"));
}
public String serialize() {
Gson gson = new Gson();
return gson.toJson(this, MyObject.class);
}
public static MyObject deserialize(String jsonString) {
Gson gson = new Gson();
return gson.fromJson(jsonString, MyObject.class);
}
public void myMethod() {
String serialized = this.serialize();
Log.d("", "serialized: " + serialized);
MyObject mis = MyObject.deserialize(serialized);
Log.d("", "deserialized " + mis.tag);
}
}
这与GSON无关。new BroadcastReceiver创建一个匿名类的实例,该类保留对其包含的MyObject的引用。LocalBroadcastManager反过来保留对mReceiver的引用。要解决此问题,请定义一个实现BroadcastReceiver的静态内部类或顶级类。静态内部类不保留对其封闭类的引用。您如何知道它不是由GC收集的?@igreen-如果我持有一个MyObject实例并调用myMethod 5次,然后通过TEST_通知广播一个意图,它会被命中5次