毕加索内存不足错误
Out of memory Error in picasso
我正在使用 picasso 库从服务器在网格上加载多个图像。
我在主 activity.Each 片段上有三个片段使用毕加索从服务器加载网格上的多个图像。当我连续从一个片段导航到另一个片段时,片段加载缓慢,半小时后应用程序因毕加索内存不足错误而崩溃。如何解决?
public class MyAlbImageAdapter extends BaseAdapter {
public List<MyAlbum> _albumList=AppController.getInstance().getPrefManger().getMyAlbums();
public static int flag=0;
private LayoutInflater inflater;
private DisplayImageOptions options;
ImageLoaderConfiguration config;
ImageLoader imageLoader;
Context c;
public MyAlbImageAdapter(Context context,List<MyAlbum> album)
{
_albumList=album;
inflater = LayoutInflater.from(context);
this.c=context;
}
@Override
public int getCount() {
return _albumList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
// Create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final ViewHolder holder;
if(v == null)
{
v = inflater.inflate(R.layout.myalb_outer_griditem, parent, false);
holder = new ViewHolder();
holder.imageView = (ImageView) v.findViewById(R.id.thumbnail);
holder.t1 = (TextView) v.findViewById(R.id.alb_name);
holder.t2 = (TextView) v.findViewById(R.id.usr_name);
v.setTag(holder);
}
else
{
holder = (ViewHolder) v.getTag();
}
MyAlbum p = _albumList.get(position);
holder.t1.setText(p.getName());
Picasso.with(c).load(AppConst.BASE_IMAGE_URL+p.getCover()).fit().centerCrop().into(holder.imageView);
return v;}}
请帮忙,我在网上尝试了很多链接,但没有找到任何有用的东西。
错误是:
07-10 12:40:46.230: E/dalvikvm(17680): Out of memory: Heap Size=131107KB, Allocated=129839KB, Limit=65536KB
07-10 12:40:46.240: E/dalvikvm(17680): Extra info: Footprint=131043KB, Allowed Footprint=131107KB, Trimmed=1452KB
07-10 12:40:46.240: E/Bitmap_JNI(17680): Create Bitmap Failed.
07-10 12:40:46.240: E/Bitmap_JNI(17680): Failed to create SkBitmap!
07-10 12:40:48.012: E/dalvikvm-heap(17680): Out of memory on a 198896-byte allocation.
类似问题。
Android Picasso ImageView - Out of Memory Exception MemoryLeak
当 Android "unwraps" 您的图像(即将其解码为位图)时,每个像素将使用 4 个字节。计算像素数,将其乘以 4,然后乘以 20(图像的数量),您可能会接近 100mb 的数字。例如,如果您的图像具有 1,000,000 像素分辨率,则它将是 1,000,000 x 4 x 20 = 80mb。
使用某种 LRU 缓存或类似缓存(或者使用为您处理缓存的通用图像加载程序库),并且只在需要时加载位图。
尝试 Fresco 来自 Facebook 的图书馆。早些时候,我还使用了 Picasso 并经常出现 OOM 错误,因为分配给应用程序的堆大小非常小,如果加载大尺寸图像,堆大小很快就会变满。 Fresco 使用 ashmen 缓存 允许缓存更多数据。它还具有下采样 图像和渐进式加载 JPEG 的选项。自从我切换到 Fresco 后,我没有遇到任何 OOM 问题。试试吧。另外,尝试使用 OkHttp 作为网络库。它提供了可能也有帮助的 http 缓存。加上@codephillip 所写的启用 largeHeap。这也有点帮助。
我正在使用 picasso 库从服务器在网格上加载多个图像。 我在主 activity.Each 片段上有三个片段使用毕加索从服务器加载网格上的多个图像。当我连续从一个片段导航到另一个片段时,片段加载缓慢,半小时后应用程序因毕加索内存不足错误而崩溃。如何解决?
public class MyAlbImageAdapter extends BaseAdapter {
public List<MyAlbum> _albumList=AppController.getInstance().getPrefManger().getMyAlbums();
public static int flag=0;
private LayoutInflater inflater;
private DisplayImageOptions options;
ImageLoaderConfiguration config;
ImageLoader imageLoader;
Context c;
public MyAlbImageAdapter(Context context,List<MyAlbum> album)
{
_albumList=album;
inflater = LayoutInflater.from(context);
this.c=context;
}
@Override
public int getCount() {
return _albumList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
// Create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final ViewHolder holder;
if(v == null)
{
v = inflater.inflate(R.layout.myalb_outer_griditem, parent, false);
holder = new ViewHolder();
holder.imageView = (ImageView) v.findViewById(R.id.thumbnail);
holder.t1 = (TextView) v.findViewById(R.id.alb_name);
holder.t2 = (TextView) v.findViewById(R.id.usr_name);
v.setTag(holder);
}
else
{
holder = (ViewHolder) v.getTag();
}
MyAlbum p = _albumList.get(position);
holder.t1.setText(p.getName());
Picasso.with(c).load(AppConst.BASE_IMAGE_URL+p.getCover()).fit().centerCrop().into(holder.imageView);
return v;}}
请帮忙,我在网上尝试了很多链接,但没有找到任何有用的东西。
错误是:
07-10 12:40:46.230: E/dalvikvm(17680): Out of memory: Heap Size=131107KB, Allocated=129839KB, Limit=65536KB
07-10 12:40:46.240: E/dalvikvm(17680): Extra info: Footprint=131043KB, Allowed Footprint=131107KB, Trimmed=1452KB
07-10 12:40:46.240: E/Bitmap_JNI(17680): Create Bitmap Failed.
07-10 12:40:46.240: E/Bitmap_JNI(17680): Failed to create SkBitmap!
07-10 12:40:48.012: E/dalvikvm-heap(17680): Out of memory on a 198896-byte allocation.
类似问题。 Android Picasso ImageView - Out of Memory Exception MemoryLeak
当 Android "unwraps" 您的图像(即将其解码为位图)时,每个像素将使用 4 个字节。计算像素数,将其乘以 4,然后乘以 20(图像的数量),您可能会接近 100mb 的数字。例如,如果您的图像具有 1,000,000 像素分辨率,则它将是 1,000,000 x 4 x 20 = 80mb。
使用某种 LRU 缓存或类似缓存(或者使用为您处理缓存的通用图像加载程序库),并且只在需要时加载位图。
尝试 Fresco 来自 Facebook 的图书馆。早些时候,我还使用了 Picasso 并经常出现 OOM 错误,因为分配给应用程序的堆大小非常小,如果加载大尺寸图像,堆大小很快就会变满。 Fresco 使用 ashmen 缓存 允许缓存更多数据。它还具有下采样 图像和渐进式加载 JPEG 的选项。自从我切换到 Fresco 后,我没有遇到任何 OOM 问题。试试吧。另外,尝试使用 OkHttp 作为网络库。它提供了可能也有帮助的 http 缓存。加上@codephillip 所写的启用 largeHeap。这也有点帮助。