我使用从这link lazyloading从url设置图像,我有非常大的位图..在我的列表视图有很多图像加载和当我滚动列表视图20-30这是错误的outofmemory ..如何,我可以解决这个错误..?从url加载大图像时OutOfMemory错误
回答
发生此错误,因为图像很大。你可以通过下面提到的方法有效地处理它。
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
检查该库的延迟加载Android-Universal-Image-Loader。 该库为异步图像加载,缓存和显示提供可重复使用的工具。它最初基于lazyloading项目,并且自那时以来大大地进行了重构和改进。
您需要确保在可能的情况下进行缩减采样,并且由于您使用的是ListView,因此您还可能通过将图像缓存到内存或磁盘中来获益。
这里阅读最佳做法:Displaying Bitmaps Effeciently
如果您正在寻找实施的最佳实践考虑使用助手库加载您的图像更简单的方法。这里是一个很好的一个:Android-Universal-ImageLoader
Outof的MemoryError
时内存的请求时使用可用的平台资源不能满足抛出。这样的请求可以由正在运行的应用程序或VM的内部功能来完成。
因此,您的映像太大,超过了VM分配的内存。缩小图像或使用下面的库。
您可以使用
懒列表
通用图像装载机
懒列表是从SD卡或者使用FOMR服务器URL的图像延迟加载。这就像按需加载图像。
图像可以缓存到本地SD卡或手机mmeory。网址被认为是关键。如果密钥存在于sdcard中,则显示来自SD卡的图像,否则通过从服务器下载显示图像并将其缓存到您选择的位置。缓存限制可以设置。您也可以选择自己的位置来缓存图像。缓存也可以被清除。
而不是用户等待下载大图像,然后显示懒惰列表按需加载图像。由于缓存的图像区域可以离线显示图像。
https://github.com/thest1/LazyList。懒惰列表
在你getview
imageLoader.DisplayImage(imageurl, imageview);
ImageLoader的显示方法
public void DisplayImage(String url, ImageView imageView) //url and imageview as parameters
{
imageViews.put(imageView, url);
Bitmap bitmap=memoryCache.get(url); //get image from cache using url as key
if(bitmap!=null) //if image exists
imageView.setImageBitmap(bitmap); //dispaly iamge
else //downlaod image and dispaly. add to cache.
{
queuePhoto(url, imageView);
imageView.setImageResource(stub_id);
}
} 到懒惰列表的替代方案是通用图像装载机
https://github.com/nostra13/Android-Universal-Image-Loader。它基于Lazy List(基于相同原理)。但它有很多其他配置。我宁愿使用通用图像加载程序因为它给你更多的配置选项。如果downlaod失败,您可以显示错误图像。可以显示圆角的图像。可以缓存在光盘或内存上。可以压缩图像。
在您的自定义适配器构造
File cacheDir = StorageUtils.getOwnCacheDirectory(a, "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
你可以用其他选项配置,以满足您的需求。
这是作者的话。(直接从下主题有用信息的链接)
如果经常使用的通用图像装载机旁边(全部或几个,然后尝试获得的OutOfMemoryError在你的应用程序 ):
减少配置(.threadPoolSize(...))中的线程池大小。建议使用1 - 5。 在显示选项中使用.bitmapConfig(Bitmap.Config.RGB_565)。 RGB_565中的位图比ARGB_8888消耗的内存少2倍。
在配置中使用.memoryCache(新的WeakMemoryCache())或者在显示选项中全部禁用内存缓存(不要调用.cacheInMemory())。
在显示选项中使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)。或者尝试.imageScaleType(ImageScaleType.EXACTLY)。
避免使用RoundedBitmapDisplayer。它会创建一个带有ARGB_8888配置的新Bitmap对象,用于在工作中显示。
随着延迟加载/通用图像装载机可以使用为平滑滚动和性能视图持有人。
http://developer.android.com/training/improving-layouts/smooth-scrolling.html。
- 1. 从URL加载图像到位图时的OutOfMemory
- 2. 如何防止Outofmemory错误加载大图像?
- 3. 从URL加载大量图像
- 4. 从URL加载.svg图像
- 5. Android从URL加载图像
- 6. ImageSwitcher从url加载图像
- 7. 从blob加载图像时显示默认和错误图像
- 8. 编写大文件时OutofMemory错误Android
- 9. IE7图像从类错误加载
- 10. 当从url解码图像时出现OutOfMemory
- 11. 当在列表视图中使用图像时Xamarin.forms OutOfMemory错误
- 12. 从Android中加载图像从URL
- 13. 在简单图像中从url加载图像时出错php类
- 14. 在.Net中加载图像时发生OutOfMemory异常
- 15. OutOfMemory异常 - 用于使用picasso加载图像时的adapter.notifiyDataSetChanged()
- 16. 加载图像时出错
- 17. 错误的图像加载时在列表视图中加载图像
- 18. 如何在加载大图像时显示加载图像?
- 19. 加载从文件流可提拉引起OutOfMemory错误
- 20. GATE PersistenceManager.loadObjectFromFile加载.gapp文件时outofmemory错误
- 21. 在JUnit中加载弹簧bean时发生OutOfMemory错误
- 22. OutofMemory LinkedList添加错误
- 23. CustomListView与位图 - OutOfMemory错误
- 24. Dlib图像加载错误,无法加载图像
- 25. 图像未从URL加载到Mvx.MvxImageView
- 26. 如何从URL加载图像在Xamarin.iOS
- 27. AS3 - 从URL加载图像坐标
- 28. C#Xamarin从url加载图像
- 29. 加载图像从URL中的Android
- 30. iPhone NSMutableArray从url加载背景图像
你有什么尝试? – 2013-04-04 13:13:57