Android 内存泄漏图像库
我正在尝试用android实现一个图像库。 代码基于,我更改了一些细节 我正在使用WeakReference,当我有太多位图时,垃圾收集器会破坏我的WeakReference。我该怎么办 我通过此功能获取位图:Android 内存泄漏图像库,android,bitmap,weak-references,Android,Bitmap,Weak References,我正在尝试用android实现一个图像库。 代码基于,我更改了一些细节 我正在使用WeakReference,当我有太多位图时,垃圾收集器会破坏我的WeakReference。我该怎么办 我通过此功能获取位图: public static WeakReference<Bitmap> getBitmap(String imageName, int width, int height) { String pathToImage = getPathToIma
public static WeakReference<Bitmap> getBitmap(String imageName, int width,
int height) {
String pathToImage = getPathToImage(imageName);
Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(pathToImage, options);
/*
* Calculate inSampleSize
*/
options.inSampleSize = calculateInSampleSize(options, width, height);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
WeakReference<Bitmap> scaledBitmap = new WeakReference<Bitmap>(
BitmapFactory.decodeFile(pathToImage, options));
return scaledBitmap;
}
publicstaticweakreference getBitmap(字符串imageName,int-width,
整数高度){
字符串pathToImage=getPathToImage(imageName);
Options=new-BitmapFactory.Options();
options.inJustDecodeBounds=true;
解码文件(路径图像,选项);
/*
*计算样本大小
*/
options.inSampleSize=计算样本大小(选项、宽度、高度);
//使用inSampleSize集合解码位图
options.inJustDecodeBounds=false;
WeakReference scaledBitmap=新的WeakReference(
解码文件(路径图像,选项));
返回缩放位图;
}
我采用了320x480的解决方案,所以我认为它没有这么大
当库中有3张以上的图片时,其中一些图片将不显示
画廊教程不是很好吗?有没有其他方法来实现这一点
谢谢大家! 您不应该使用软引用,而应该看看lrucache类(它在honeycomb中可用,但它是android支持库的一部分) 您可以在此处阅读更多信息:
它非常方便:使用它,您就不必自己处理弱引用的内存:-)谢谢您的建议!现在我不再有内存泄漏了。。。但在高效显示位图方面仍然存在问题。。。(不要每次我更改当前位图时都重新加载:()只是为了确定:您是从internet下载图像?还是使用预打包的图像?当我打开库时,图像都在我的磁盘上;)(以前下载过)您是使用异步任务加载图像,还是直接从getView加载图像?另外,当你说“某些图像未显示时,你是指预览还是全屏图像?嗯,我打开了一个新线程;)你能看看吗?;)它们正在异步任务中加载。有些图像未显示,因为缓存已破坏它们,现在必须重新加载它们……这不是我喜欢的行为:(有些应用程序,如whatsapp,可以毫无问题地显示许多图像…:(