Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 内存泄漏图像库_Android_Bitmap_Weak References - Fatal编程技术网

Android 内存泄漏图像库

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

我正在尝试用android实现一个图像库。 代码基于,我更改了一些细节

我正在使用WeakReference,当我有太多位图时,垃圾收集器会破坏我的WeakReference。我该怎么办

我通过此功能获取位图:

    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,可以毫无问题地显示许多图像…:(