如何在Android中清除缓存的图像?
如何在Android中以编程方式清除内存中的缓存图像 我有一个如何在Android中清除缓存的图像?,android,listview,caching,android-lazyadapter,Android,Listview,Caching,Android Lazyadapter,如何在Android中以编程方式清除内存中的缓存图像 我有一个列表视图,当我滚动它时,它会重新加载图像。因此它会产生OutofMemoryError。我希望在获取此异常时清除缓存。怎么做?有什么帮助吗 编辑: 我只是在我的程序中使用以下代码来加载图像: 如果使用位图,可以通过调用释放一些内存。但是,我不确定这是否能解决您的问题。如果使用位图,可以通过调用释放一些内存。但是,我不确定这是否能解决您的问题。您是否正在使用ListView中的位图对象 罗曼·盖伊(Romain Guy)去年在谷歌I/O
列表视图
,当我滚动它时,它会重新加载图像。因此它会产生OutofMemoryError
。我希望在获取此异常时清除缓存。怎么做?有什么帮助吗
编辑:
我只是在我的程序中使用以下代码来加载图像:
如果使用位图,可以通过调用释放一些内存。但是,我不确定这是否能解决您的问题。如果使用位图,可以通过调用释放一些内存。但是,我不确定这是否能解决您的问题。您是否正在使用ListView中的位图对象 罗曼·盖伊(Romain Guy)去年在谷歌I/O大会上谈到了这对内存和流畅性能的重要性 基本上,你应该有一定数量的位图对象(他用了8个),每次你在滚动时加载下一个图像,它应该进入刚刚消失的对象
您可能认为缓存图像的速度更快,但它会导致内存问题和垃圾收集问题,这不可避免地会导致延迟。您正在使用ListView中的位图对象吗 罗曼·盖伊(Romain Guy)去年在谷歌I/O大会上谈到了这对内存和流畅性能的重要性 基本上,你应该有一定数量的位图对象(他用了8个),每次你在滚动时加载下一个图像,它应该进入刚刚消失的对象 您可能认为缓存映像更快,但它会导致内存问题和垃圾收集问题,这不可避免地会导致延迟。是的。。。已知的“问题”,假设这是ListView的行为 如何修复它:
public class DebtAdapter extends BaseAdapter {
...
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
Bitmap bitmap;
if(convertView == null)
{
convertView = inflater.inflate(viewResourceId, null);
holder = new ViewHolder();
holder.photo = (ImageView) convertView.findViewById(R.id.photo);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
bitmap = item.getContact().getPhoto();
if(bitmap != null)
{
holder.photo.setImageBitmap(bitmap);
}
else
{
holder.photo.setImageBitmap(null);
}
return convertView;
}
}
我希望它能有所帮助。是的……已知的“问题”,假设这是ListView的行为
如何修复它:
public class DebtAdapter extends BaseAdapter {
...
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
Bitmap bitmap;
if(convertView == null)
{
convertView = inflater.inflate(viewResourceId, null);
holder = new ViewHolder();
holder.photo = (ImageView) convertView.findViewById(R.id.photo);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
bitmap = item.getContact().getPhoto();
if(bitmap != null)
{
holder.photo.setImageBitmap(bitmap);
}
else
{
holder.photo.setImageBitmap(null);
}
return convertView;
}
}
我希望这会有帮助。你能发布代码吗?让我们看看为什么会出现内存错误。你能发布代码吗?让我们看看为什么会出现内存错误。不确定重新使用位图对象是什么意思。你是指重新使用列表项的视图(即使用转换视图)?.因为我看不到在那次谈话中提到重新使用实际的位图对象来改进preform:可能我错了,但想法是回收对象以防止GC重复进行收集并降低性能不确定重新使用位图对象的意思..你是指重新使用列表项的视图吗(即使用转换视图)?.因为我看不到在那次谈话中提到重新使用实际的位图对象来改进preform:可能我错了,但想法是循环使用对象以防止GC重复进行收集并降低性能。注意:我使用了一个返回位图对象的虚拟项变量。注意:alos我使用了一个虚拟项v返回位图对象的变量。对于通过SoftReference清除的位图,您将如何调用.recycle(),我认为您不能?对于通过SoftReference清除的位图,您将如何调用.recycle(),我认为您不能?