解决util(单例)类中的不一致问题

时间:2019-04-05 14:44:30

标签: java android

我有一个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的方法。

1 个答案:

答案 0 :(得分:0)