我同意 Raghav Sood 的观点。我添加了更多关于如何在列表视图或网格视图中显示图像的内容。
我使用通用图像加载器在列表视图中显示大量图像。
您应该在不使用时回收位图。
http://www.youtube.com/watch?v=_CruQY55HOk。讨论是关于内存管理和内存泄漏以及如何避免它。如果您遇到内存泄漏,您可以使用 MAT Analyzer 来查找内存泄漏。该视频还讨论了使用 MAT Analyzer 并演示了如何摆脱内存泄漏。
当您在列表视图中显示图像时,您需要回收视图。可见的视图不会被回收。
要在 gridview 或 listview 中显示图像,您可以使用通用图像加载器。延迟加载的改进版本。图像被缓存。您可以在本地或从服务器显示图像。
https://github.com/nostra13/Android-Universal-Image-Loader
File cacheDir = StorageUtils.getOwnCacheDirectory(context, "your folder");
// Get singletone instance of ImageLoader
imageLoader = ImageLoader.getInstance();
// Create configuration for ImageLoader (all options are optional)
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a)
// You can pass your own memory cache implementation
.discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
.discCacheFileNameGenerator(new HashCodeFileNameGenerator())
.enableLogging()
.build();
// Initialize ImageLoader with created configuration. Do it once.
imageLoader.init(config);
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_id)//display stub image
.cacheInMemory()
.cacheOnDisc()
.displayer(new RoundedBitmapDisplayer(20))
.build();
在你的 getView()
ImageView image=(ImageView)vi.findViewById(R.id.imageview);
imageLoader.displayImage(imageurl, image,options);//provide imageurl, imageview and options
您可以配置其他选项以满足您的需求。
与通用图像加载器一起,您可以查看持有人以实现平滑滚动和性能。http://developer.android.com/training/improving-layouts/smooth-scrolling.html。
http://www.youtube.com/watch?v=wDBM6wVEO70。谈话是关于观众和性能的。