나는 안드로이드 게임에서 총 24 비트의 비트 맵을 가지고 있으며, 총 644kb가있다.android out of memory and fatal signal 11 error
내 게임에는 3 가지 활동, 기본 메뉴 활동, 레벨 메뉴 활동 및 게임 활동이 있습니다.
나는 첫 번째 것을 입력하고, 두 번째는 내가 선택한 다음, 내 레벨을 선택하고 게임을 시작합니다. 레벨을 끝내면 창이 펑하고 올라가서 (다시 시도, 메뉴, 다음 레벨로 돌아 가기) 원하는 것을 선택하고 다음 레벨을 선택하고, 다음 레벨을 플레이하고, 끝내고, 계속 진행합니다. 다음 레벨이지만 게임은 멈 춥니 다.
01-19 17:03:54.100: E/dalvikvm-heap(8604): Out of memory on a 16000016-byte allocation.
01-19 17:03:54.110: I/dalvikvm(8604): "main" prio=5 tid=1 RUNNABLE
01-19 17:03:54.110: I/dalvikvm(8604): | group="main" sCount=0 dsCount=0 obj=0x40ece568 self=0x40e2bb00
01-19 17:03:54.110: I/dalvikvm(8604): | sysTid=8604 nice=0 sched=0/0 cgrp=apps handle=1075340848
01-19 17:03:54.110: I/dalvikvm(8604): | schedstat=(4853149437 2903961165 6778) utm=426 stm=59 core=0
01-19 17:03:54.110: I/dalvikvm(8604): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
01-19 17:03:54.110: I/dalvikvm(8604): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:500)
01-19 17:03:54.110: I/dalvikvm(8604): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:353)
01-19 17:03:54.110: I/dalvikvm(8604): at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:376)
01-19 17:03:54.110: I/dalvikvm(8604): at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:406)
01-19 17:03:54.110: I/dalvikvm(8604): at com.example.happylines.GameActivity$Screen.LoadBitmaps(GameActivity.java:357)
01-19 17:03:54.110: I/dalvikvm(8604): at com.example.happylines.GameActivity$Screen.<init>(GameActivity.java:474)
01-19 17:03:54.110: I/dalvikvm(8604): at com.example.happylines.GameActivity.onCreate(GameActivity.java:300)
01-19 17:03:54.110: I/dalvikvm(8604): at android.app.Activity.performCreate(Activity.java:5008)
01-19 17:03:54.110: I/dalvikvm(8604): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
01-19 17:03:54.110: I/dalvikvm(8604): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2043)
01-19 17:03:54.110: I/dalvikvm(8604): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
01-19 17:03:54.110: I/dalvikvm(8604): at android.app.ActivityThread.access$600(ActivityThread.java:134)
01-19 17:03:54.110: I/dalvikvm(8604): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
01-19 17:03:54.110: I/dalvikvm(8604): at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 17:03:54.110: I/dalvikvm(8604): at android.os.Looper.loop(Looper.java:137)
01-19 17:03:54.110: I/dalvikvm(8604): at android.app.ActivityThread.main(ActivityThread.java:4782)
01-19 17:03:54.110: I/dalvikvm(8604): at java.lang.reflect.Method.invokeNative(Native Method)
01-19 17:03:54.110: I/dalvikvm(8604): at java.lang.reflect.Method.invoke(Method.java:511)
01-19 17:03:54.110: I/dalvikvm(8604): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
01-19 17:03:54.110: I/dalvikvm(8604): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
01-19 17:03:54.110: I/dalvikvm(8604): at dalvik.system.NativeStart.main(Native Method)
01-19 17:03:54.120: A/libc(8604): Fatal signal 11 (SIGSEGV) at 0x0004d190 (code=1), thread 8604 (mple.happylines)
내가 활동을 전환 할 때마다 나는 (마무리를 사용, 또한 내가 모든 비트 맵 크기를 추가하면 난 단지 6백44킬로바이트을 가지고 있기 때문에, 왜 내 전화의 메모리가 부족 갈 수 이해 ... 그리고하지 않음); 활동 시작 후.
여기 게임 활동에 비트 맵을로드합니다.
face_happy = BitmapFactory.decodeResource(getResources(),
R.drawable.happy_face);
face_happy = Game.ScaleWidth(face_happy, Game.faceRadio);
face_sad = BitmapFactory.decodeResource(getResources(),
R.drawable.sad_face);
face_sad = Game.ScaleWidth2(face_sad, Game.faceRadio);
particlez[0] = BitmapFactory.decodeResource(getResources(),
R.drawable.red_particle);
particlez[1] = BitmapFactory.decodeResource(getResources(),
R.drawable.blue_particle);
particlez[2] = BitmapFactory.decodeResource(getResources(),
R.drawable.green_particle);
particlez[3] = BitmapFactory.decodeResource(getResources(),
R.drawable.yellow_particle);
particlez[0] = Game.ScaleWidth(particlez[0], 14);
particlez[1] = Game.ScaleWidth(particlez[1], 14);
particlez[2] = Game.ScaleWidth(particlez[2], 14);
particlez[3] = Game.ScaleWidth(particlez[3], 14);
particlez[4] = Game.ScaleWidth(particlez[0], 10);
particlez[5] = Game.ScaleWidth(particlez[1], 10);
particlez[6] = Game.ScaleWidth(particlez[2], 10);
particlez[7] = Game.ScaleWidth(particlez[3], 10);
finish_bg = BitmapFactory.decodeResource(getResources(),
R.drawable.finishscreen);
play = BitmapFactory.decodeResource(getResources(),
R.drawable.play_button);
menu = BitmapFactory.decodeResource(getResources(),
R.drawable.menu_button);
retry = BitmapFactory.decodeResource(getResources(),
R.drawable.retry_button);
play = Game.ScaleWidth(play, 5.4f);
retry = Game.ScaleWidth(retry, 5.4f);
menu = Game.ScaleWidth(menu, 5.4f);
playY = Game.height - 2 * play.getHeight();
menuY = playY;
retryY = playY;
menuX = Game.width/2 - menu.getWidth()/2;
playX = menuX + 1.5f * play.getWidth();
retryX = menuX - 1.5f * play.getWidth();
다음 레벨 버튼을 누르면 게임 활동으로 다시 이동합니다.
Game.level++;
Intent intent = new Intent(GameActivity.this,
GameActivity.class);
startActivity(intent);
finish();
저는 imageviews를 사용하지 않습니다. –
좋습니다. 따라서이 방법으로 드로어 블을 디코딩하는 것이 좋습니다. http://developer.android.com/training/displaying-bitmaps/load-bitmap.html – koni