Android:在网格视图教程中使用媒体文件会导致9张图片后内存耗尽



我正在尝试学习如何在网格视图中显示存储在android手机上的所有图像(我的目标是让用户选择他们想要处理的图像)。

我正在调整教程:

http://developer.android.com/resources/tutorials/views/hello-gridview.html

http://pastie.org/2504664

上面是我修改过的ImageAdapter类的链接(我认为唯一需要更改的东西)。

在其中,我有一个媒体文件位置的字符串数组,而不是资源id的整数数组,并将它们转换为像这样的位图:

imageView.setImageBitmap(BitmapFactory.decodeFile(picture_paths[position]));

我首先通过:

获取文件位置
   public void populateArray(){
      Log.v("Jenny","Populating array");
      picture_paths = new String[getCount()];
      cursor.moveToFirst();
      int count = 0;
      while(!cursor.isLast() ){
          count ++;
          picture_paths[cursor.getPosition()] = cursor.getString(0);
          cursor.moveToNext();
      }
}

只要我的图片少于9张(三列三列),它就像宝石一样好用。

超过这个数,程序就会崩溃,并出现"内存不足"的错误。如果我只是按照教程和使用资源图像,我可以有尽可能多的我喜欢,似乎。

所以:我是不是走错路了?将其作为位图加载到密集型吗?还有其他选择吗?

显示存储在手机上的图像似乎是一项非常微不足道的基本任务。做这件事的"正确"方式是什么?我是否可以让这种方式发挥作用?

编辑:在我的第二部手机(Galaxy)上测试使事情工作得很好(可以显示任何数量的图像,尽管有时光标检索的文件路径似乎是'null')。在我最初的测试手机(myTouch)上,无论我如何尝试显示图像(可绘制的,位图,等等),我都会得到内存错误。为什么我在两部手机上得到不同的表现?

编辑:嗯,可能会发生的一件事是我的myTouch上有更多的图片?我用我的Galaxy拍了更多的照片,现在它也出现了内存错误....网格视图不用于显示照片(如果不是,它有什么用?)

在myTouch上仍然限制为9,但在Galaxy上可以达到11

当旋转(即视图重绘)时,两者都崩溃并出现内存不足错误。(虽然不是少量的图片(可能少于6 ?)

试着把你的图片大小调整到原来的一半。

BitmapFactory.Options o = new BitmapFactory.Options();
o.inSampleSize = 5;
Bitmap previewBitmap = Bitmap.createScaledBitmap(
                BitmapFactory.decodeFile(picLocation, o), 
                85, 
                85, 
                false);
imageView.setImageBitmap(previewBitmap);

根据文档,这应该将图像大小的数量减少1/5和1/25像素数。提高或降低o.inSampleSize到其他值取决于你想要什么。此外,在createScaledBitmap中,您可以通过将85更改为您想要的任何尺寸来更改位图的大小。

如果没有,其他资源可能会有所帮助:

android -创建位图时内存不足异常

加载图像到位图对象时出现奇怪的内存不足问题

位图大小过大导致内存不足

相关内容

最新更新