Android Outofmemory drawable
Solution 1
Its a known bug, its not because of large files. Since Android Caches the Drawables, its going out of memory after using few images. But i found alternate way for it, by skipping the android default cache system.
Soultion: Create a drawable folder in Assets and move the images to "drawable" folder in assets and use the following function to get 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);
}
Refrence : https://stackoverflow.com/posts/6116316/revisions
Also that add the line below in your manifest file
android:largeHeap="true"
Solution 2
Try moving your drawables from lower MPI to HDPI or to even higher dimension folders like XHDPI depending on your resolution.
My images's dimensions ranged from 400-800 pixels. I stored my drawables in MDPI that was throwing OutOfMemory on my Galaxy S4. I moved them to HDPI and it solved the problem.
Solution 3
As mentioned by Muhammad, try moving your images in drawable(or MDPI) to a different dimension folder as HDPI or higher.
Always try to use compressed PNGs as far as possible. There are a lot of online sites that you can compress them in a very large scale.
reference: http://developer.android.com/guide/practices/screens_support.html
Solution 4
As long as your images are not very large in size, you can use the drawable-nodpi folder for your PNGs. I can confirm this solved the issue for me.
Kennett
Updated on July 27, 2022Comments
-
Kennett almost 2 years
this is my drawable in array for my viewpager, when i run it, i results in out of memory error, is there any way to reduce the image size or etc? i do lots of search but i can't use them as well.. please help...
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; }
-
Benjamin S over 8 yearsI almost can't believe that something as simple as this solved a memory problem I was having immediately. Thank you!
-
Stefano Giacone about 8 yearsDo not solve this kind of issue with android:largeHeap="true", that's not a solution