[英]Solve inconsistency in a util (singleton) class
我有一個util,singleton類,它有一些參數。 如果某些參數通過setter類方法更改,則類會通知訂閱者更改。 活動,片段和服務可以訂閱這些更改。 我在這個類中有一個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類方法時,就像這樣:
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
從類似二傳手的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.