假设如下:
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”的实例仍然存在。有没有办法避免这种情况?