How to fix a 鈥渏ava.lang.OutOf MemoryError: bitmap size exceeds VM budget 鈥?error on andr oid

by Sheepz » Tue, 31 Aug 2010 04:37:17 GMT


Sponsored Links
 i 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/trunk/bestcardgameever-android/Branches/Yaniv%20For%20Android)
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(PhoneWindow.java:
1213) at android.app.Activity.dispatchTouchEvent(Activity.java:2066)
at com.android.internal.policy.impl.PhoneWindo



Other Threads

1. Can't debug/install applications into Tablet with Android 2.1 using ADB commands

Hi:

I have a tablet with Android 2.1 and I'm able to query the device
issuing the adb devices command, for which I get the "0123456789ABCDEF
device" response (serial number and device state).
However, any other command such install, push, pull, or shell, I never
get a response. I mean, after issuing the command, nothing happens
until, after a while, I press ^C and it returns to the Windows Command
prompt.

Any idea what could be wrong or how to debug what it's happening?

Thanks;
Gus

-- 

2. ListView and CursorAdapter

I've a problem to populate a listview from a cursor filled from db. I
can't understand why, newView and bindView are not called.
The stupid things is that I've already done this thing other times but
now doesn't work, and I can't undestand where is the problem.

this is my code:

_curAround is filled with a few records.

ListaAdapter rA = new ListaAdapter(this, _curAround, point);
ListView list = (ListView) findViewById(R.id.lvLista);
list.setAdapter(rA);



public class ListaAdapter extends CursorAdapter {
        private LayoutInflater mInflater;
        GeoPoint _MyPos;
        public ListaAdapter(Context context, Cursor c, GeoPoint mypos) {
                super(context, c);
                mInflater = LayoutInflater.from(context);
                _MyPos = mypos;
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {
                Aggiorna(view, cursor);
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent)
{
           View v= mInflater.inflate(R.layout.item, null);
           Aggiorna(v, cursor);
           return v;
        }

        void Aggiorna(View v, Cursor cur){
                FarmaCity.MyLog("Lista", "Nome:"+cur.getString(1));
                TextView t = (TextView) v.findViewById(R.id.tvNome);
                t.setText(cur.getString(1));/*
                t = (TextView) v.findViewById(R.id.tvIndirizzo);
                t.setText(cur.getString(2));
        }

}

-- 

3. Encrypted JSON

4. Problems with the JavaBinder (!!! FAILED BINDER TRANSACTION!!!)

5. Cross Word Game

6. init: critical process Service Manager exited 4 times in 4 minutes

7. ListView item selected no longer functions with a button in the listviewitem