Предполагая следующее:Использование WeakReferenced слушателя
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!");
}
};
}
}
К сожалению, если есть опечатки/синтаксических ошибок, это было больше, значит быть псевдо-код.
В любом случае, много раз к тому времени, когда «Действие» будет завершено, WeakReference для слушателя будет GCed, хотя экземпляр «AnotherClass» все еще жив. Есть ли способ избежать этого?
Почему вы используете 'WeakReference' вместо того, чтобы просто держаться за обычную ссылку? – chrylis
В случае действия или фрагмента, например, если GC хочет GC, то я не хочу, чтобы ссылка на слушателя была единственной вещью, которая сохраняет ее. – StackOverflowed
Это означает, что обратный вызов по существу бесполезен, поскольку клиентский код не может полагаться на его вызов. – chrylis