我有一个util单例类,其中有一些参数。如果某些参数通过方法的设置类发生更改,则该类将通知订户通知更改。活动,片段和服务可以订阅这些更改。 我在此类内有一个Listener接口。订阅者必须实现接口定义的方法。
private static List<Listener> listeners = new ArrayList<>();
public static synchronized void addListener(Listener listener) {
listeners.add(listener);
}
public static synchronized void removeListener(Listener listener) {
listeners.remove(listener);
}
由于某些组件可以从该类订阅和取消订阅,因此使用上述两种方法,侦听器大小会发生很好的变化。但是,当某些setter-kind方法被调用时,像这样:
public static synchronized void decrementPosition() {
if (position > 0) {
position--;
for (Listener listener : listeners) {
listener.positionChanged(position);
}
}
}
我在调试模式下看到,“侦听器”的大小与添加和删除都不是最新的。似乎'listeners.remove(listener)'无法正常工作,但是当我对其进行调试时,看起来似乎已经从列表中删除了'listener'。 当然,我得到一个
java.lang.IllegalStateException: Handler (android.os.Handler) {3fc60df} sending message to a Handler on a dead thread
类似setter的方法。
答案 0 :(得分:0)