Android Outofmemory可绘制

这是我的drawable在我的viewpager数组,当我运行它,我导致内存不足的错误,是否有任何方法来减less图像大小或等? 我做了很多search,但我不能使用它们..请帮助…

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

Solutions Collecting From Web of "Android Outofmemory可绘制"

它是一个已知的bug ,并不是因为大文件。 由于AndroidcachingDrawables,因此在使用less量图像之后就会出现内存不足的情况。 但我find了替代方式,通过跳过Android的默认caching系统。

Soultion :在Assets中创build一个可绘制文件夹,并将这些图像移动到资源中的“可绘制”文件夹中,并使用以下函数获取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" 

尝试将画图从较低的MPI移动到HDPI,或根据您的分辨率移动到更高维度的文件夹(如XHDPI)。

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

正如Muhammad所提到的,尝试将您的图像以可绘制 (或MDPI)格式移动到与HDPI或更高版本不同的维度文件夹中。

请尽量使用压缩的PNG 。 有很多在线网站,你可以压缩他们在一个非常大的规模。

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

只要你的图像尺寸不是很大,你可以使用PNG的drawable-nodpi文件夹。 我可以证实这个解决了我的问题。

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

[android] [java] [android-studio]