android - 毕加索内存不足错误

标签 android out-of-memory

我正在使用 picasso 库从服务器加载网格上的多个图像。 我的主要 Activity 有三个 fragment 。每个 fragment 使用 picasso 从服务器加载网格上的多个图像。当我连续从一个 fragment 导航到另一个 fragment 时, fragment 加载速度很慢,半小时后应用程序由于毕加索内存不足错误而崩溃。如何解决?

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): 内存不足:堆大小=131107KB,已分配=129839KB,限制=65536KB 07-10 12:40:46.240:E/dalvikvm(17680):额外信息:足迹= 131043KB,允许的足迹= 131107KB,修剪= 1452KB 07-10 12:40:46.240: E/Bitmap_JNI(17680): 创建位图失败。 07-10 12:40:46.240: E/Bitmap_JNI(17680): 创建 SkBitmap 失败! 07-10 12:40:48.012: E/dalvikvm-heap(17680): 198896 字节分配内存不足。

最佳答案

类似问题。 Android Picasso ImageView - Out of Memory Exception MemoryLeak

当 Android“解开”您的图像(即将其解码为位图)时,每个像素将使用 4 个字节。计算像素数,将其乘以 4,然后乘以 20(图像数量),您可能会接近 100mb 这个数字。例如,如果您的图像分辨率为 1,000,000 像素,则为 1,000,000 x 4 x 20 = 80mb。

使用某种 LRU 缓存或类似的缓存(或者使用为您处理缓存的通用图像加载器库),并且仅在需要时加载位图。

关于android - 毕加索内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31334644/

相关文章:

Macos 中的 Android studio (Intellij) 键盘映射和右括号

java - Apache Spark : java. lang.OutOfMemoryError:Java 堆空间问题

java - 运行java应用程序时如何克服java内存不足错误?

java - 按最新位置发出

c# - 在多个平台上使用.NET DLL

Android 对部分文本使用粗体

c++ - VS2015 x64 三角库

Android:位图内存不足

java - 打印行,Java 堆空间

android - 如何从 android 中的数据库 SQlite 中删除前 10 行?