When should I use a WeakListener ?
You should use a WeakListener any time you are adding a listener to an object, but there is no code - and possibly no opportunity - to explicitly remove it.
If the thing you are listening to does have some kind of observable life-cycle, it is preferable to explicitly add and detach listeners.
But in the case that you are adding a listener which is never explicitly removed, it is good form to use WeakListeners