Android Outofmemory drawable

时间:2013-09-03 03:06:30

标签: android out-of-memory

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

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;
}

6 个答案:

答案 0 :(得分:19)

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

<强> Soultion : 在Assets中创建一个drawable文件夹,并将图像移动到资源中的“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"

答案 1 :(得分:11)

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

我的图片尺寸范围为400-800像素。我将我的drawables存储在我的Galaxy S4上抛出OutOfMemory的MDPI中。我把它们移到了HDPI,它解决了这个问题。

答案 2 :(得分:2)

正如Muhammad所提到的,尝试将 drawable (或MDPI)中的图像移动到HDPI或更高版本的其他维度文件夹。

始终尽量使用压缩的PNG 。有很多在线网站可以大规模压缩它们。

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

[android] [java] [android-studio]

答案 5 :(得分:0)

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

因为我花了一些时间来计算如何添加这些文件 这里有一些解释它的打印屏幕: Drawable - &gt; New - &gt;批量可绘制导入(用于多个文件) enter image description here
然后添加文件 然后选择了决议 enter image description here