android-Picasso回调防止垃圾收集

问题描述

我在Android应用程序中使用Picasso库加载图像。当图像成功加载时,我需要得到通知,所以我使用:

Picasso.get().load(imageURL).into(imageView,new Callback() {
        @Override
        public void onSuccess() {
            // do sth
        }

        @Override
        public void onError(Exception e) {

        }
    });

如毕加索库文档The Callback param is a strong reference and will prevent your Activity or Fragment from being garbage collected.所述,由于这个原因,我的应用程序使用的内存在替换了许多片段之后都增长了很多,所有片段都使用了回调。

如何摆脱回调并允许在运行onSuccess方法之后对碎片进行垃圾回收?

解决方法

使用毕加索时添加标签:

        Picasso.get().load("imageURL").tag("custom_tag").into(imageView,new Callback() {
        @Override
        public void onSuccess() {
            // do sth
        }

        @Override
        public void onError(Exception e) {

        }
    });

然后在替换/删除片段或退出活动之前,请调用以下命令取消任务:

Picasso.get().cancelTag("custom_tag");

请注意,callback将在调用onSuccess()之后自动删除。因此,当尚未完成回调时,提供的解决方案很有用。