Android png图片在内存中很大

时间:2012-07-10 09:07:29

标签: android image png

我在android中有一个具有imageflipper的应用程序。问题是,在大约8个图像加载到内存后,我得到一个内存不足错误。

好吧,我试图进行动态图像加载,这样如果用户翻转2个图像,我会将下一个2加载到内存中并删除2个第一个图像。它有点工作,但它很难看,当用户翻转图像时我遇到麻烦(imageflipper.showprevious()),我无法真正移动所有图像并将新图像放在开头。

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

2 个答案:

答案 0 :(得分: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();
            }
        }

答案 1 :(得分: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);