gpt4 book ai didi

android drawable to bitmap引起的OOM

转载 作者:行者123 更新时间:2023-11-29 14:40:08 26 4
gpt4 key购买 nike

这是我的代码:

int[] image = {R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2};

和 getView:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);
ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
imageView.setBackgroundResource(image[position]);

return convertView;
}

一切都很好。没有OOM。

然后,我想先对可绘制对象进行采样:

public static Bitmap sampleImage(Context context, int resourceId, int sampleSize) {        
Bitmap resizeBmp = null;
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = sampleSize;
resizeBmp = BitmapFactory.decodeResource(context.getResources(), resourceId, opts);

return resizeBmp;
}

和新的 getView:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);
ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
Bitmap item = BitmapUtil.sampleMaskInShelf(getApplicationContext(), image[position], 4);
imageView.setImageBitmap(item);
// imageView.setBackgroundResource(image[position]);

return convertView;
}

事情发生了。起初,应用程序不会崩溃。但是使用内存超过50MB,我上下滚动后,导致OOM。

问题是:1)为什么采样图像会增加内存的使用。2)如何减少内存占用,还有其他办法吗?

最佳答案

您似乎正在使用 ListView 吗?

在这种情况下,您可以通过以下几个步骤获得更好的服务(并希望节省大量内存):

  1. 您想尽可能地重新使用 convertView。关于如何做到这一点已经写了很多文章。 Here is one .
  2. 看起来您实际上只有两个不同的图像(image1image2)。每次调用 getView() 时,您似乎都在对位图进行采样。您可能应该预先计算两个采样位图,然后一遍又一遍地使用它们。

关于android drawable to bitmap引起的OOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12593324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com