【问题标题】:Android Outofmemory drawableAndroid 内存不足可绘制
【发布时间】:2013-09-03 03:06:29
【问题描述】:

这是我的 viewpager 的可绘制数组,当我运行它时,我会导致内存不足错误,有没有办法减小图像大小等? 我做了很多搜索,但我也不能使用它们.. 请帮忙...

GalImages = new int[] { R.drawable.tutorials_01_android_en,R.drawable.tutorials_02_android_en,R.drawable.tutorials_03_android_en,R.drawable.tutorials_04};break

@Override
public Object instantiateItem(ViewGroup container, int position) {

    ImageView imageView = new ImageView(context);
    final int temp = position;
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    imageView.setImageResource(GalImages[position]);

    ((ViewPager) container).addView(imageView, 0);
    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {}
    });
    return imageView;
}

【问题讨论】:

标签: android out-of-memory


【解决方案1】:

它是known bug,不是因为大文件。由于 Android 缓存了 Drawables,因此在使用少量图像后内存不足。但是我通过跳过android默认缓存系统找到了替代方法。

灵魂: 在 Assets 中创建一个 drawable 文件夹,并将图片移动到 assets 中的“drawable”文件夹,然后使用以下函数获取 BitmapDrawable

public static Drawable getAssetImage(Context context, String filename) throws IOException {
    AssetManager assets = context.getResources().getAssets();
    InputStream buffer = new BufferedInputStream((assets.open("drawable/" + filename + ".png")));
    Bitmap bitmap = BitmapFactory.decodeStream(buffer);
    return new BitmapDrawable(context.getResources(), bitmap);
}

参考:https://stackoverflow.com/posts/6116316/revisions

另外,在清单文件中添加以下行

android:largeHeap="true"

【讨论】:

  • 不要用android:largeHeap="true"解决这种问题,那不是解决办法
【解决方案2】:

尝试将您的可绘制对象从较低的 MPI 移动到 HDPI 或更高维度的文件夹,如 XHDPI,具体取决于您的分辨率。

我的图片尺寸范围为 400-800 像素。我将我的可绘制对象存储在我的 Galaxy S4 上抛出 OutOfMemory 的 MDPI 中。我将它们移至 HDPI 并解决了问题。

【讨论】:

  • 我几乎不敢相信这么简单的事情可以立即解决我遇到的内存问题。谢谢!
【解决方案3】:

正如 Muhammad 所说,尝试将 drawable(或 MDPI)中的图像移动到 HDPI 或更高级别的不同维度文件夹中。

始终尽量使用压缩的 PNG。有很多在线网站可以进行非常大规模的压缩。

参考:http://developer.android.com/guide/practices/screens_support.html

【讨论】:

    【解决方案4】:

    只要您的图片尺寸不是很大,您就可以使用 drawable-nodpi 文件夹来保存您的 PNG。我可以确认这解决了我的问题。

    【讨论】:

      【解决方案5】:

      android:largeHeap:"true" 添加到您的清单文件并将您的可绘制图像移动到文件夹mipmap-hopi

      [android] [java] [android-studio]

      【讨论】:

        【解决方案6】:

        之前在这里提到过@Muhammad, 创建包含的多个图像(hdpi、ldpi、mdpi、xdpi 等)为我解决了这个问题。

        因为我花了一些时间弄清楚如何添加这些文件 以下是一些解释它的打印屏幕: Drawable -->New --> Batch Drawable Import(用于多个文件)
        然后添加文件 然后选择决议

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-10
          • 1970-01-01
          • 1970-01-01
          • 2011-01-22
          • 2018-02-01
          • 1970-01-01
          相关资源
          最近更新 更多