Зачем использовать WeakReference для прослушивателей Android?

Я работаю над большой базой кода и вижу во многих местах этот тип кода:

public static class RequestCustomData implements View.OnClickListener { WeakReference<MainActivity> mainActivity; public RequestCustomData(MainActivity activity) { mainActivity = new WeakReference<>(activity); } @Override public void onClick(View view) { MainActivity activity = mainActivity.get(); activity.requestCustomData(true, null); } } 

Я немного смущен, почему это используется, так много мест? Я взглянул на этот документ, но он не смог прояснить, почему этот тип кода так сильно используется в приложении, над которым я работаю.

https://community.oracle.com/blogs/enicholas/2006/05/04/understanding-weak-references

Кто-нибудь может объяснить мне, является ли это общей схемой? Если да, то почему?

Solutions Collecting From Web of "Зачем использовать WeakReference для прослушивателей Android?"

Слабая ссылка, просто поставленная, является ссылкой, которая недостаточно сильна, чтобы заставить объект оставаться в памяти.

Авторы этого кода, скорее всего, хотели избежать утечки контекста Activity, если объект RequestCustomData мог пережить сам Activity.

Я рекомендую сообщение Ромен Гай по этой теме, а также несколько конкретных случаев, чтобы избежать:

  • Внутренние классы и утечки
  • Потоки и утечки