我在android中有一个具有imageflipper的应用程序。问题是,在大约8个图像加载到内存后,我得到一个内存不足错误。
好吧,我试图进行动态图像加载,这样如果用户翻转2个图像,我会将下一个2加载到内存中并删除2个第一个图像。它有点工作,但它很难看,当用户翻转图像时我遇到麻烦(imageflipper.showprevious()),我无法真正移动所有图像并将新图像放在开头。
我的问题是:
有没有更好的方法来做这种事情?调整图像大小并没有多大帮助。
答案 0 :(得分:0)
我使用下面的代码段来解决与内存相关的问题,我们可以借助isRecycled()
方法解决这个问题。与您的代码一起添加此代码,finalImage
是我的BitmapDrawable
,R.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 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);