Android Bitmpafun在BitmapFactory.decodeFileDescriptor崩溃

Android Bitmpafun在BitmapFactory.decodeFileDescriptor崩溃,android,bitmap,Android,Bitmap,我正在使用android的Bitmapfun应用程序有效地加载位图。但有时BitmapFactory.decodeFileDescriptor()会发生崩溃。日志cat和函数如下所示。在return语句中发生崩溃。请帮帮我,先谢谢你 public static Bitmap decodeSampledBitmapFromDescriptor( FileDescriptor fileDescriptor, int reqWidth, int reqHeight, ImageCac

我正在使用android的Bitmapfun应用程序有效地加载位图。但有时BitmapFactory.decodeFileDescriptor()会发生崩溃。日志cat和函数如下所示。在return语句中发生崩溃。请帮帮我,先谢谢你

 public static Bitmap decodeSampledBitmapFromDescriptor(
        FileDescriptor fileDescriptor, int reqWidth, int reqHeight, ImageCache cache) {

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFileDescriptor(fileDescriptor, null, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;

    // If we're running on Honeycomb or newer, try to use inBitmap
    if (Utils.hasHoneycomb()) {
        addInBitmapOptions(options, cache);
    }

    return BitmapFactory.decodeFileDescriptor(fileDescriptor, null, options);
}
Logcat

  06-25 14:20:56.055: E/AndroidRuntime(5978): FATAL EXCEPTION: AsyncTask #3
06-25 14:20:56.055: E/AndroidRuntime(5978): java.lang.RuntimeException: An error occured while executing doInBackground()
06-25 14:20:56.055: E/AndroidRuntime(5978):     at com.vbk.vobok.util.AsyncTask$3.done(AsyncTask.java:325)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at java.lang.Thread.run(Thread.java:856)
06-25 14:20:56.055: E/AndroidRuntime(5978): Caused by: java.lang.IllegalArgumentException: Problem decoding into existing bitmap
06-25 14:20:56.055: E/AndroidRuntime(5978):     at android.graphics.BitmapFactory.decodeFileDescriptor(BitmapFactory.java:664)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at com.vbk.vobok.util.ImageResizer.decodeSampledBitmapFromDescriptor(ImageResizer.java:196)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at com.vbk.vobok.util.ImageFetcher.processBitmap(ImageFetcher.java:242)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at com.vbk.vobok.util.ImageFetcher.processBitmap(ImageFetcher.java:255)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at com.vbk.vobok.util.ImageWorker$BitmapWorkerTask.doInBackground(ImageWorker.java:326)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at com.vbk.vobok.util.ImageWorker$BitmapWorkerTask.doInBackground(ImageWorker.java:1)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at com.vbk.vobok.util.AsyncTask$2.call(AsyncTask.java:313)
06-25 14:20:56.055: E/AndroidRuntime(5978):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-25 14:20:56.055: E/AndroidRuntime(5978):     ... 4 more

我使用了BitMapFun,很抱歉告诉你,这个项目充满了bug。例如,在AsyncTask中,他们不是从UiThread执行setDrawable(..),而是作为WeakReferance队列工作。这意味着,如果用户快速向下滚动,用户将需要很长时间才能看到图像(取决于网络强度)


关于您的bug,在Android 2.1-2.3.7中有一个Dalvik VM GC bug,它不会释放本机堆中分配的空间。您必须在yur位图上调用recycle(),在imageView上调用setDrawable(null),并调用System.gc()这个错误应该得到解决。如果我帮了你,请告诉我。干杯

我和你遇到了同样的情况。但是,我故意用一些数据来制造这种情况。原因是我被指定了

mImageFetcher=newimagefetcher(getActivity(),1024683)

我故意的图形内存非常大,超出了我设定的内存,我本来希望能检测到图像显示的无序,但是没有出现,只是遇到了你的情况。因此,我建议您可以压缩图像并将小比例设置为img,如下所示:


mImageFetcher=newimagefetcher(getActivity(),100100)

我也面临同样的问题,
在中,我删除了
ImageResizer.java
上的方法
addInBitmapOptions
,错误被修复。

如果您的android sdk>=4.0(或以上4.0,我不确定)为false,则options.inSampleSize必须为1。

请帮助我。应用程序未运行。这似乎是真的。如果(Utils.hasHoneycomb()){addInBitmapOptions(options,cache);}我在运行4.x的设备上发生崩溃问题是-一旦映像保存并缓存到磁盘上-删除此行是安全的。但是-在随后的重建中(拖动应用程序卸载)-图像现在无法加载。我已经有这个问题很久了,你认为你能帮我解决吗?是的-再次下载项目(他们最近更新了他),并在解码为位图功能(ImageUtils.java)中设置选项:o.inpurgable;o、 不可投入共享;它将授予GC更多从本地heapI中删除位图的能力,heapI今天下载了最新的一个,但它说您需要在Android studio中打开它。当我第一次下载它的时候,你不需要Android studio来运行它,但是现在你做了一些奇怪的事情,听起来很奇怪,这只是一个Android项目——IDE有什么关系?我不这么认为,试着自己下载最新的一个,并与eclipse一起使用