Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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