1

我在 android 中有一个应用程序,它有一个imageflipper. 问题是,在将大约 8 张图像加载到内存后,出现内存不足错误。

好吧,我尝试进行动态图像加载,这样如果用户翻转 2 个图像,我会将下 2 个图像加载到内存并删除 2 个第一个图像。它有点工作,但它很丑陋,当用户将图像翻转回来时我遇到了麻烦(imageflipper.showprevious())。

我不能真正转移所有图像并将新图像放在开头。

我的问题是:
有没有更好的方法来做这种事情?调整图像大小并没有真正帮助。

4

2 回答 2

0

我使用下面的代码片段来解决与内存相关的问题,我们可以通过isRecycled()方法来解决这个问题。用你的添加这个代码,这finalImage是我的BitmapDrawableR.id.image_viewer是我的 imageview,你可以改变它

 @Override
        protected void onDestroy() {

             finalImage.setCallback(null);
             if (!((BitmapDrawable) finalImage).getBitmap().isRecycled()) {
             ((BitmapDrawable) finalImage).getBitmap().recycle();
             }
             finalImage = null;
            unbindDrawables(findViewById(R.id.image_viewer));
            Runtime.getRuntime().gc();
            // scaledBitmap.recycle();
            System.gc();
            super.onDestroy();
        }

        private void unbindDrawables(View view) {
            if (view.getBackground() != null) {
                view.getBackground().setCallback(null);
            }
            if (view instanceof ViewGroup) {
                for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                    unbindDrawables(((ViewGroup) view).getChildAt(i));
                }
                ((ViewGroup) view).removeAllViews();
            }
        }
于 2012-07-10T09:13:38.527 回答
0

使用BitmapFactory.Options

BitmapFactory.Options opts = new BitmapFactory.Options();
opt.inSampleSize = 2;
//this will decrease bitmap size,
// but also affect quality of the image, 
//so just play with this value to spot the good one;
Bitmap b = BitmapFactory.decodeFile(fileName, opts);
于 2012-07-10T09:13:45.090 回答