为什么要在Android Listeners上使用WeakReference?

2hh7jdfx  于 2023-05-12  发布在  Android
关注(0)|答案(1)|浏览(254)

我正在处理一个大型代码库,在许多地方看到这种类型的代码:

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
谁能告诉我这是不是一个常见的模式?如果是这样,为什么?

syqv5f0l

syqv5f0l1#

简单地说,弱引用是一种引用,它不足以强制对象保留在内存中。
如果RequestCustomData对象的寿命比Activity本身长,则此代码的作者很可能希望避免Activity上下文的泄漏。
我推荐使用Romain Guy's post on this topic以及一些需要避免的特定情况:

相关问题