WeakListener полезны в ситуациях, когда вы специально хотите, чтобы GC контролировал время жизни слушателя.
Как указывалось ранее, это действительно другая семантика, по сравнению с обычным случаем addListener / removeListener, но она допустима в некоторых сценариях.
Например, рассмотрим очень большое дерево, котороеразреженный - некоторые уровни узлов не определены явно, но могут быть выведены из родительских узлов далее вверх по иерархии.Неявно определенные узлы прослушивают те родительские узлы, которые определены, поэтому они обновляют свое подразумеваемое / унаследованное значение.Но дерево огромно - мы не хотим, чтобы подразумеваемые узлы были вокруг навсегда - до тех пор, пока они используются вызывающим кодом, плюс, возможно, кэш LRU в несколько секунд, чтобы избежать повторного использования одних и тех же значений снова и снова.
Здесь слабый слушатель позволяет дочерним узлам прослушивать родителей, а также определять время их жизни на основе достижимости / кэширования, поэтому структура не поддерживает все подразумеваемые узлы в памяти.