Intereting Posts
Android: как заставить активность возвращать результаты деятельности, которая ее вызывает? FindViewByID возвращает null Getmeasuredheight () и getmeasuredwidth () возвращает 0 после View.measure () Добавление рамки или границы в ImageView и Drop-Shadow Активность перезапускается в Force Close Добавление параметра предпочтения в фрагментарный элемент FragmentPagerAdapter Каков наилучший способ обновления базовых данных адаптера? Android ==> Анализ памяти ==> Анализатор памяти Eclipse? Новая официальная иконка для Android-навигатора Пользовательский конструктор представлений не вызывается в android 5.0.2 Значок приложения Android Launcher не обновлен до нового значка после обновления рынка AdView вызывает утечку памяти Есть ли способ распечатать трассировку стека по требованию? Как сохранить запланированную тревогу после того, как приложение было убито Android или убийцей задачи? Android Studio не может решить org.junit

Зачем использовать 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.

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

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