【Android】通过CustomTarget释放Glide在ViewHolder 所占用的图片内存,避免内存泄漏

news/2024/11/29 8:47:54/

在上述代码中,Glide 加载图片所占用的内存是通过 CustomTargetonResourceReady 方法返回的 Drawable 对象来表示的。因此,在 onViewRecycled 方法中,我们可以通过将 Drawable 对象的引用置为 null 来释放所占用的内存。

具体来说,我们可以将 CustomTarget 对象声明为 ViewHolder 的成员变量,并在 onViewRecycled 方法中将其引用置为 null,以释放 Drawable 所占用的内存。例如:

public class MyViewHolder extends RecyclerView.ViewHolder {private LinearLayout linearLayout;private CustomTarget<Drawable> customTarget;public MyViewHolder(View itemView) {super(itemView);linearLayout = itemView.findViewById(R.id.linear_layout);}public void onBindViewHolder(MyData data) {customTarget = new CustomTarget<Drawable>() {@Overridepublic void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {// Do something with the Drawable herelinearLayout.setBackground(resource);}@Overridepublic void onLoadCleared(@Nullable Drawable placeholder) {// 从任何视图中删除onResourceReady中提供的Drawable,并确保不保留对它的引用。}};Glide.with(itemView.getContext()).load(R.drawable.access).diskCacheStrategy(DiskCacheStrategy.ALL).into(customTarget);}@Overridepublic void onViewRecycled() {super.onViewRecycled();// 在 onViewRecycled 中释放 CustomTarget 所占用的内存customTarget = null;}
}

在上述代码中,我们在 MyViewHolder 中声明了一个 customTarget 成员变量,并在 onBindViewHolder 方法中使用它来加载图片。在 onViewRecycled 方法中,我们通过将 customTarget 的引用置为 null 来释放 Drawable 所占用的内存。

需要注意的是,如果我们在加载图片时使用了一些特殊的设置,例如调整图片尺寸、缩放类型等,那么在释放内存时也需要相应地进行清理,以避免内存泄漏的问题。例如,如果我们在加载图片时使用了 override 方法来调整图片尺寸,那么在释放内存时也需要将相应的参数传入 CustomTarget 对象中,以确保内存被正确释放。例如:

public class MyViewHolder extends RecyclerView.ViewHolder {private LinearLayout linearLayout;private CustomTarget<Drawable> customTarget;public MyViewHolder(View itemView) {super(itemView);linearLayout = itemView.findViewById(R.id.linear_layout);}public void onBindViewHolder(MyData data) {customTarget = new CustomTarget<Drawable>() {@Overridepublic void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {// Do something with the Drawable herelinearLayout.setBackground(resource);}@Overridepublic void onLoadCleared(@Nullable Drawable placeholder) {// 从任何视图中删除onResourceReady中提供的Drawable,并确保不保留对它的引用。}};Glide.with(itemView.getContext()).load(R.drawable.access).override(200, 200).diskCacheStrategy(DiskCacheStrategy.ALL).into(customTarget);}@Overridepublic void onViewRecycled() {super.onViewRecycled();// 在 onViewRecycled 中释放 CustomTarget 所占用的内存,并传入相应的 override 参数customTarget = null;}
}

总之,在 onViewRecycled 方法中释放 Glide 加载图片所占用的内存,我们需要将 CustomTarget 对象的引用置为 null,以释放 Drawable 所占用的内存。如果在加载图片时使用了一些特殊的设置,例如调整图片尺寸、缩放类型等,那么在释放内存时也需要相应地进行清理,以避免内存泄漏的问题。


http://www.ppmy.cn/news/338369.html

相关文章

共享电动车APP开发

当前用户的出行主要是为了日常的工作或者是节假日的一些休闲娱乐活动&#xff0c;所以说抓住 这一类用户的需求&#xff0c;能够有效发展平台的整体用户粘性;要知道用户的出行图的就是一个 便捷&#xff0c;虽然说日常生活中有公交地铁这样的公共交通设备&#xff0c;但是这样…

电动车防盗管理系统

第一章 引言. 第一章 引言 1.1 文档说明 此文档旨在解释说明电动车防盗管理系统的原理与构成、系统功能和相关案例。未经授权&#xff0c;不得以任何形式转载篡改&#xff0c;奔骝科技不对篡改后的文档负责。 1.2 读者对象集成商销售 依据本解决方案&#xff0c;集成商销售可…

远程控制和原理和实践

按理来说&#xff0c;本人不该发表此类专业的文章&#xff0c;但是从鄙人的开发经历出发&#xff0c;让本人斗胆在此对远控软件做一些论述&#xff0c;谈论一点自己的认识。 程序工程代码地址&#xff1a;点击此处下载。 程序分为两个部分&#xff0c;控制端和被控端&#xf…

戴尔笔记本vostro 5402高通无线网卡出现wlan找不到WI-FI网络诊断说无线适配器或接入点问题

环景&#xff1a; 戴尔笔记本vostro 5402 windows 10家庭中文版20H 问题描述&#xff1a; 笔记本高通QCA61x4A 802.11AC无线网卡,出现wlan找不到WI-FI网络&#xff0c;不能上网&#xff0c;禁用启用网卡才行&#xff0c;隔一段时间重复出现。网卡诊断说无线适配器或接入点问…

【Windows 10 】关机后自动重启

场景 下班关电脑后&#xff0c;经常自己重启开机。 原因 重启和故障设置中系统失败设置为自动重启 解决方案 电脑右键--设置--高级系统设置--高级--&#xff08;启动和故障恢复&#xff09;设置--“自动重新启动&#xff08;R&#xff09;”去勾--&#xff08;写入调试信息&a…

金属商务本-戴尔Vostro成就3450评测

点击进入戴尔官方网站了解更多详情 前言&#xff1a;戴尔的商务笔记本在业内以其稳定可靠、做工优良、服务到位&#xff0c;一直享有很高的声誉。本次送达评测室的是目前戴尔Vostro成就系列的最畅销机型Vostro3450&#xff0c;也是继其前辈Vostro 3400取得辉煌并且功成身退后&a…

Dell Vostro 3400在Fedora 15安装无线网卡驱动

Fedora 15刚刚推出&#xff0c;就迫不及待的上手了&#xff0c;格式化了新的Ubuntu 11.04&#xff0c;直接上Fedora 15&#xff01;但是安装好之后见到Gnome 3的喜悦迅速在无法安装无线网卡的焦急和郁闷中消失&#xff0c;经过了差不多一天的尝试&#xff0c;终于把无线网卡安装…

戴尔创业节丨高效编程利器Vostro低至2099!双11提前享!

剁手节前最后一周 戴尔小企业官网11.11预热 高端产品不减配 商务办公神器低至2999 咨询客服&#xff0c;多款工作站5折抢购&#xff01; 无套路&#xff0c;不烧脑 戴尔带你大换新&#xff01; 更有戴尔深圳创业节&#xff01; 随叫随到的&#xff0c;724专属服务 联系戴尔官网…