2

以下を仮定します。

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!");
          }
      };


   }
}

タイプミス/構文エラーがある場合は申し訳ありませんが、これは疑似コードを意図したものです。

とにかく、「アクション」が完了するまでに、「AnotherClass」のインスタンスがまだ生きていても、多くの場合、リスナーへの WeakReference が GC されます。これを回避する方法はありますか?

4

2 に答える 2

6

AnotherClass に Listener を実装させるか、内部にプライベート インスタンスを持たせます。いいえ:

Listener myListener = new Listener() {
  public void onListed() {
    ....
  }
};

リスナーへの AnotherClass 参照は、その参照を維持します (プログラムに AnotherClass 参照が存在するまで)

于 2013-09-29T14:23:53.260 に答える