有效地从内存中将图像加载到GridView

时间:2014-11-30 10:02:14

标签: android gridview

我从互联网下载多张图片并将其存储在内存中。现在我想在GridView中加载这些图像,这完全发生,但过了一段时间后,我在日志文件中收到Garbage Collector消息。 我用谷歌搜索它,我发现我的应用程序可能会在应用程序堆大小中加载更多的位图到内存中,从而导致问题。

我的适配器: -

public class MyAdapter extends BaseAdapter {


            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return data.size();
            }

            @Override
            public String getItem(int arg0) {
                // TODO Auto-generated method stub
                return data.get(arg0);
            }

            @Override
            public long getItemId(int arg0) {
                // TODO Auto-generated method stub
                return arg0;
            }

            @Override
            public View getView(int arg0, View arg1, ViewGroup arg2) 
            {
                if(arg1==null)
                {
                    LayoutInflater inflater = (LayoutInflater) itemgridsub.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    arg1 = inflater.inflate(R.layout.gridsubitems, arg2,false);
                }

                TextView user = (TextView)arg1.findViewById(R.id.gridsub_tv);

                //setting comics sans as textview's default font
                Typeface type = Typeface.createFromAsset(getAssets(), "fonts/comic.ttf");
                user.setTypeface(type);
                user.setText(data.get(arg0).substring(3));

                ImageView img =(ImageView)arg1.findViewById(R.id.gridsub_iv);
                //setting the sdim of imageview
                img.getLayoutParams().height=(int) (height/dpi); 
                img.requestLayout();

                Bitmap img1 = loadimage(path+arg0+".jpg");
                //img.setImageBitmap(finalimage);
                img.setImageBitmap(img1);


                return arg1;
            }



        }

使用的变量: -

  • data是一个全局 ArrayList<String>变量。
  • height 全球 float
  • path 全球 String

使用的方法: -

public Bitmap loadimage(String path)
    {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        return BitmapFactory.decodeFile(path, options);
    }

我的活动的作用: - 下载多个图像,将它们存储到内部存储器中。加载它们,调整它们并替换原始图像。现在加载它们以适应GridView的imageview。

我想要的是什么: - 请告诉我装载gridview的适配器是否正确。是否真的回收视图并在超出范围时删除图像?或者指出代码的任何改进以进行适当的内存管理。

感谢。

0 个答案:

没有答案