之前发现,ListView里面的图片资源越占越大,特别是当列表载入的图片相当大的时候,比如微博的中等图片大小,就非常难受.而log也可以看出,是图片没有回收,尽管相关的View已经不使用了,这就是doc里面说的内存泄露了.
因为ImageView里面关联着Bitmap.导致Bitmap没有办法释放,所以尽管ListView只是展示一部分内容(当前可见的部分),其它部分却没有办法回收.
还好,在AbsListView里面提供了一个RecyclerListener接口,客户端覆盖这个接口中的方法,手动回收Bitmap,就可以了.
默认这个不处理什么东西的.
@Override
public void onMovedToScrapHeap(final View view) {}
这个方法名可以看出是将View移入待回收区,
但是由于引用的问题,虚拟机无法在第一时间回收,要等到所有的引用都无效了.才会回收
如我在微博程序中的:
TagsViewGroup tagsViewGroup=itemView.mTagsViewGroup;
if (null!=tagsViewGroup) {
tagsViewGroup.setAdapter(null);
tagsViewGroup.removeAllViews();
}
将View清空了,就可以回收Bitmap了.
这一点很重要,当然还可以处理TextView,等占用资源多的View的回收,对于一个列表来说,加载大图,用这样的方法释放就可以了.
monitor里面heap测试,大约是在25m以内,而heapsize=64m的手机.
这样就可以避免以前在32m heap中配置中出现oome了.
引爆你的图片浏览,亮瞎你的眼睛.
分享到:
相关推荐
在实际项目中,你可能需要加载多个图片,可以通过循环读取文件夹中的所有图片文件,然后依次添加到ImageList和ListView中。例如: ```csharp string[] imageFiles = Directory.GetFiles("图片路径", "*.jpg"); // ...
在本文中,我们将深入探讨如何在ListView中加载多幅图片,并且讨论图片的存储策略,以及如何利用ImageList组件进行有效的管理。 首先,ListView控件本身并不直接支持加载图像。为了在ListView中显示图片,我们需要...
6. **限制放大范围**: 为了防止图片过大导致用户体验下降,我们需要设定一个最大放大比例。当图片达到最大比例时,停止放大动画。 7. **恢复原状**: 当用户上拉ListView或停止滑动时,需要恢复图片的原始大小。这...
在给定的场景中,"C#在ListView中Subitem显示图片"是一个关于在ASP.NET Web应用程序中使用ListView控件来展示数据时,如何在Subitems中添加图像的功能。 ListView控件是ASP.NET 2.0引入的一种高度可定制的数据绑定...
滚动listview可以让listview顶部的图片放大。
本话题聚焦于“下拉放大头部图片的ListView”,这是一种常见的设计模式,如最美应用和多米音乐的详情页所展示的那样,当用户下拉列表时,顶部的图片会逐渐放大,创造出一种动态的视觉体验。 首先,我们要理解这个...
然而,在实现ListView时,由于其内部机制,可能会出现一个问题,即ListView中的item(列表项)重用导致图片重复加载,这不仅会消耗不必要的网络资源,还可能影响用户体验。本文将深入探讨这个问题,并提供解决方案。...
为了避免加载大图时内存溢出,Glide允许我们指定图片的加载尺寸。例如,我们可以根据ImageView的大小设定加载尺寸: ```java Glide.with(context) .load(url) .override(imageView.getWidth(), imageView....
在实际开发中,你可能还需要处理更多细节,比如数据的异步加载、ListView的滚动优化(使用convertView复用列表项View)以及点击事件的监听等。通过这个过程,开发者可以更好地理解和掌握Android中的数据绑定和视图...
总结来说,要实现ListView在LargeIcon模式下图片居中显示,你需要自定义Adapter、创建适配的布局文件、设置Adapter并根据项目数量调整图片大小。通过这种方式,你可以灵活地控制ListView的显示效果,提供良好的用户...
然而,在ListView中加载图片时,由于滚动过程中View的复用,经常会出现图片显示混乱的问题,这就是所谓的“图片错位”或者“图片混乱”现象。这个问题主要涉及到ListView的优化和图片加载策略。 首先,我们需要理解...
【Glide入门例子-LIstView浏览图片】 在Android应用开发中,展示大量图片时,我们经常需要使用ListView来高效地加载和滚动图片。Glide是一个强大的图片加载库,它优化了图片的加载过程,提供了平滑的滚动体验,同时...
将上传图片到ListView中且保存到指定文件夹下,以缩略图形式显示,且可以删除、浏览图片。
本示例将深入讲解如何在ListView中实现图片和文字的结合显示,以增强用户体验。我们将使用Android Studio 3.1.4进行开发。 首先,理解ListView的基本概念。ListView是一种可滚动的视图,用于展示一个可变大小的数据...
然而,如果直接在ListView中加载网络图片,可能会导致应用性能下降,因为这会阻塞主线程,造成UI卡顿。为了解决这个问题,我们需要实现ListView的异步加载图片功能。本篇文章将详细介绍如何通过软引用缓存图片,实现...
"ListView头图片下拉放大效果"就是一种常见的交互设计,当用户下拉ListView时,头部的图片会逐渐放大,释放时则恢复原状,为用户提供了可视化的反馈。 实现这个效果主要涉及到以下几个关键知识点: 1. **自定义...
1. 使用高效的图片加载库:对于ListView中的图片加载,推荐使用像Glide、Picasso或 Fresco 这样的第三方库。这些库具有智能缓存机制,能在内存和磁盘上管理图片,避免不必要的内存占用,同时支持自动调整图片大小,...
在描述中提到,提供的代码资源可以解决大部分开发者遇到的头疼问题,即如何优化ListView的图片加载。通常,直接从网络加载图片会消耗大量的内存和CPU资源,导致应用卡顿,甚至崩溃。为了解决这个问题,开发者需要...
本篇将深入探讨如何对ListView进行优化,以及如何实现图片的异步加载和缓存策略,以避免这些问题。 **1. ListView优化** ListView的优化主要涉及以下几个方面: 1.1 **convertView复用机制**:ListView的Adapter...