Monday, August 30, 2010

[android-developers] Re: How to fix a “java.lang.OutOfMemoryError: bitmap size exceeds VM budget ” error on android

Read this link, it helped me ALOT

http://davidjhinson.wordpress.com/2010/05/19/scarce-commodities-google-android-memory-and-bitmaps/


On Aug 30, 1:37 pm, Sheepz <eladk...@gmail.com> wrote:
> Hi all, I've seen this question asked many times but none of the
> answers really made sense in what I'm doing... I have an android game
> (see source at Google source control:http://code.google.com/p/bestcardgameever-android/source/browse/#svn/...)
> It's a card game, and I've used a method that redraws each hand every
> round - that might be wasteful but I couldn't think of a better way to
> do it. Here is the code for the redrawHand method:
>
> private void redrawHand(Hand hand) {
>   ImageView[] cardView = hand.getCardsViews();
>   View container = hand.getContainer();
>   for (int i = 0; i < GameData.YANIV_NUM_CARDS; i++) {
>    PlayingCard card = hand.getCardByLocation(i);
>    if (card != null) {
>     // Show Card
>     cardView[i].setVisibility(View.VISIBLE);
>     int resId;
>     if (hand.shouldCardsBeShown()) {
>      resId = card.getImageResourceId();
>     } else {
>      resId = R.drawable.back;
>     }
>     cardView[i].setImageResource(resId);
> if (hand.isHumanPlayer()) {
>  // when selected, move up 15 pixels
>  boolean isSelected = hand.isCardSelected(i);
>  ((LinearLayout.LayoutParams)
> cardView[i].getLayoutParams()).bottomMargin = isSelected? 15 : 0;}   } else {
>
> cardView[i].setVisibility(View.INVISIBLE);   }  }  // Set player name
> hand.getHandLabelView().setText(hand.getHandLabel());
> container.requestLayout(); }
>
> After installing ACRA (http://code.google.com/p/acra/wiki/ACRAHowTo) I
> have started getting crash reports from devices saying the following:
>
> java.lang.OutOfMemoryError: bitmap size exceeds VM budget at
> android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at
> android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:363) at
> android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:212) at
> android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:
> 673) at android.content.res.Resources.loadDrawable(Resources.java:
> 1639) at android.content.res.Resources.getDrawable(Resources.java:535)
> at android.widget.ImageView.resolveUri(ImageView.java:541) at
> android.widget.ImageView.setImageResource(ImageView.java:293) at
> com.geekadoo.ui.Yaniv.redrawHand(Yaniv.java:765) at
> com.geekadoo.ui.Yaniv.performYaniv(Yaniv.java:539) at
> com.geekadoo.ui.Yaniv.performYanivHandler(Yaniv.java:503) at
> com.geekadoo.ui.Yaniv.access$1(Yaniv.java:502) at com.geekadoo.ui.Yaniv
> $2.onClick(Yaniv.java:323) at android.view.View.performClick(View.java:
> 2196) at android.view.View.onTouchEvent(View.java:3849) at
> android.widget.TextView.onTouchEvent(TextView.java:6376) at
> android.view.View.dispatchTouchEvent(View.java:3385) at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872) at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872) at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872) at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872) at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872) at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872) at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872) at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:872) at
> com.android.internal.policy.impl.PhoneWindow
> $DecorView.superDispatchTouchEvent(PhoneWindow.java:1764) at
> com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneW indow.java:
> 1213) at android.app.Activity.dispatchTouchEvent(Activity.java:2066)
> at com.android.internal.policy.impl.PhoneWindow
> $DecorView.dispatchTouchEvent(PhoneWindow.java:1748) at
> android.view.ViewRoot.handleMessage(ViewRoot.java:1561) at
> android.os.Handler.dispatchMessage(Handler.java:99) at
> android.os.Looper.loop(Looper.java:123) at
> android.app.ActivityThread.main(ActivityThread.java:3977) at
> java.lang.reflect.Method.invokeNative(Native Method) at
> java.lang.reflect.Method.invoke(Method.java:521) at
> com.android.internal.os.ZygoteInit
> $MethodAndArgsCaller.run(ZygoteInit.java:782) at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) at
> dalvik.system.NativeStart.main(Native Method)
>
> I am not able to understand why this is happening - is there a memory
> leak? should I somehow release something that I'm missing? Please
> help, there are a lot of people that can't enjoy this free open source
> game because of this. Thanks!

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment