滚动时,我的网格视图中的图像消失了

时间:2017-08-07 06:56:53

标签: android multithreading gridview bitmap

我正在使用网格视图来显示我存储的图像,但是当我向下滚动时,图像在图像视图中消失并且不再加载。我还使用线程将图像加载到图像视图中。 这是我的代码(这些代码也在我的网格视图适配器类中):

        @Override
        public View getView(final int position,  View convertView, ViewGroup parent) {
            Log.e("sara" , "this part takes time");


            LayoutInflater inflater = getLayoutInflater();


            convertView = getLayoutInflater().inflate(R.layout.gallery_gridsq, parent, false);
            iv = (ImageView) convertView.findViewById(R.id.icon);
            file = new File(Uri.parse(getItem(position).toString()).getPath());
            new myTask(iv, file).execute();

            return convertView;
        }


        private class myTask extends AsyncTask <Void , Void ,Bitmap> {
            ImageView iv;
            File file;

            public myTask(ImageView iv, File file) {
                this.iv=iv;
                this.file= file;
            }



            @Override
            protected Bitmap doInBackground(Void... params) {

                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;

                options.inJustDecodeBounds = false;
                options.inSampleSize = 8;
                try {
                    bmp = BitmapFactory.decodeStream(new FileInputStream(file), null, options);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                return bmp;
            }


            @Override
            protected void onPostExecute(Bitmap aVoid) {

                iv.setImageBitmap(aVoid);

            }

        }

1 个答案:

答案 0 :(得分:0)

我能想到导致类似麻烦的内存问题。

使用日志向下滚动时,检查是否仍然调用了getView:Log.e("sara" , "this part takes time");

如果向下滚动时调用该行,请检查android studio中提供的android监视器中的内存。

点击底部的android monitor&gt; monitors&GT;并根据设置(可能是128或256MB)观察内存是否达到上限。

如果是这样,你就会遇到记忆问题。可能的原因是您没有回收列表并且内存正在堆叠。在内存的高峰期,图像将不会被加载。

它的实现应该是在您向下滚动并加载新图像时删除已加载的图像。

另外,尝试使用glide因为它有一个很好的内存问题解决方案,并且在许多领域通常比bitmapfactory更好。