假设如下:
public interface Listener {
public void onListen();
}
public class ActionClass {
WeakReference<Listener> listener = null;
public void doAction(String action, Listener listener) {
this.listener = new WeakReference<Listener>(listener);
doTheAction(action);
}
public void actionComplete() {
if (listener != null && listener.get() != null)
listener.onListen();
}
}
public class AnotherClass {
ActionClass actioner = new ActionClass();
void init() {
actioner.doAction("something", new Listener() {
onListened() {
Log.d("Tag", "Action complete!");
}
};
}
}
抱歉,如果有拼写错误/语法错误,这更多的是伪代码。
无论如何,很多时候,当“Action”完成时,对侦听器的 WeakReference 将被 GCed,即使“AnotherClass”的实例仍然存在。有没有办法避免这种情况?