게임에 쓰려고 인물들의 얼굴과 대사를 화면에 표시하는 부분을 제작하고 있는데,

중간에 프로그램이 죽어버립니다.


로그캣 에러 내용입니다.

08-06 21:36:34.593: ERROR/dalvikvm-heap(13210): 11289952-byte external allocation too large for this process.

08-06 21:36:34.621: INFO/dalvikvm-heap(13210): Clamp target GC heap from 33.516MB to 32.000MB

08-06 21:36:34.621: ERROR/GraphicsJNI(13210): VM won't let us allocate 11289952 bytes

08-06 21:36:34.621: DEBUG/dalvikvm(13210): GC_FOR_MALLOC freed 0K, 48% free 2886K/5511K, external 26945K/28993K, paused 16ms

08-06 21:36:34.621: DEBUG/AndroidRuntime(13210): Shutting down VM

08-06 21:36:34.621: WARN/dalvikvm(13210): threadid=1: thread exiting with uncaught exception (group=0x40015560)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210): FATAL EXCEPTION: main

08-06 21:36:34.624: ERROR/AndroidRuntime(13210): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.graphics.Bitmap.nativeCreate(Native Method)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.graphics.Bitmap.createBitmap(Bitmap.java:477)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.graphics.Bitmap.createBitmap(Bitmap.java:444)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:349)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:498)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:473)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.content.res.Resources.loadDrawable(Resources.java:1709)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.content.res.Resources.getDrawable(Resources.java:581)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at com.uni.y.SActivity.onCreate(SActivity.java:59)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.os.Handler.dispatchMessage(Handler.java:99)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.os.Looper.loop(Looper.java:130)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at android.app.ActivityThread.main(ActivityThread.java:3683)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at java.lang.reflect.Method.invokeNative(Native Method)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at java.lang.reflect.Method.invoke(Method.java:507)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)

08-06 21:36:34.624: ERROR/AndroidRuntime(13210):     at dalvik.system.NativeStart.main(Native Method)

08-06 21:36:34.632: WARN/ActivityManager(110):   Force finishing activity com.uni.y/.SActivity

08-06 21:36:34.632: WARN/ActivityManager(110):   Force finishing activity com.uni.y/.YActivity


아래는 소스코드입니다.

wrap.setOnClickListener(new LinearLayout.OnClickListener(){

 public void onClick(View v){

  if(count<numOfLines){

   if(script[count].equals("char")){

    if(isFirstFaceView){

face1.setBackgroundDrawable(SActivity.this.getResources().getDrawable(getDrawableId(SActivity.this,script[count+1])));

fFlipper.showNext();

isFirstFaceView=false;

count+=2;

    }else{

face.setBackgroundDrawable(SActivity.this.getResources().getDrawable(getDrawableId(SActivity.this,script[count+1])));

fFlipper.showPrevious();

isFirstFaceView=true;

count+=2;

    }

   }

   if(isFirstTextView){

text1.setText(script[count++]);

mFlipper.showNext();

isFirstTextView=false;

   }else{

text.setText(script[count++]);

mFlipper.showPrevious();

isFirstTextView=true;

   }

  }

 }

});


getDrawableId 메소드입니다.

public static int getDrawableId(Context context, String name)

{

Assert.assertNotNull(context);

Assert.assertNotNull(name);


return context.getResources().getIdentifier(name,"drawable", context.getPackageName());

}



ViewFlipper 두 개를 사용해서

하나는 사람 얼굴이 들어갈 ImageView 두 개가 들어있고,

다른 하나는 대사가 들어갈 TextView 두 개가 들어있습니다.

setBackgroundDrawable로 ImageView에 들어가는 얼굴을 바꿔주는데,

두 ImageView를 각각 다른 이미지로 바꾸면 프로그램이 죽어버립니다.

뭐가 잘못됐을까요...