以下を仮定します。
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 されます。これを回避する方法はありますか?