Oyunumla neredeyse bitirdim, ama bugün gerçek bir anoying problemiyle karşılaştım. Oyuna başladığımda ve sadece birkaç aramayı beklerken, program otomatik olarak kapanıyor. Ve bende hiçbir açıklanma yok.Logcat'ımdaki hata nedir?
Bu benim logcat gösterir budur:
01-22 16:20:31.232: DEBUG/szipinf(333): Initializing inflate state
01-22 16:20:31.563: DEBUG/PhoneWindow(333): couldn't save which view has focus because the focused view [email protected] has no id.
01-22 16:20:36.362: WARN/ActivityManager(73): Activity pause timeout for HistoryRecord{406532f8 com.JDL.Apps.Snake/.SnakeGame}
01-22 16:20:43.682: INFO/ActivityManager(73): Start proc com.android.launcher for activity com.android.launcher/com.android.launcher2.Launcher: pid=358 uid=10026 gids={}
01-22 16:21:20.393: ERROR/InputDispatcher(73): channel '406762c0 com.JDL.Apps.Snake/com.JDL.Apps.Snake.SnakeGame (server)' ~ Consumer closed input channel or an error occurred. events=0x8
01-22 16:21:20.402: ERROR/InputDispatcher(73): channel '406762c0 com.JDL.Apps.Snake/com.JDL.Apps.Snake.SnakeGame (server)' ~ Channel is unrecoverably broken and will be disposed!
01-22 16:21:21.092: INFO/WindowManager(73): WIN DEATH: Window{406762c0 com.JDL.Apps.Snake/com.JDL.Apps.Snake.SnakeGame paused=false}
01-22 16:21:21.142: WARN/ActivityManager(73): Timeout of broadcast BroadcastRecord{40728640 android.intent.action.TIME_TICK} - [email protected]406300f8, started 56630ms ago
01-22 16:21:21.142: WARN/ActivityManager(73): Receiver during timeout: BroadcastFilter{4062f930 ReceiverList{4062f8b8 73 system/1000 local:406300f8}}
01-22 16:21:21.172: INFO/ActivityManager(73): Process com.JDL.Apps.Snake (pid 333) has died.
01-22 16:21:21.362: INFO/WindowManager(73): WIN DEATH: Window{4072b188 SurfaceView paused=false}
01-22 16:21:21.443: INFO/ActivityManager(73): Low Memory: No more background processes.
ben program çökmeleri olduğunu bilmiyorum çünkü paylaşmak için maalesef kodu var.
DÜZENLEME: Çizim kodu:
@Override
public void screen(float deltaTime) {
Graphics g = app.getGraphics();
g.drawPixmap(Assets.background, 0, 0);
g.drawPixmap(Assets.facebook, 750, 20);
g.drawText("SNAKE", 10, 150, Color.BLACK, 150, AndroidGraphics.LEFT,
null, 0);
g.drawText("START", g.getWidth()/2, g.getHeight() - 20, Color.BLACK,
120, AndroidGraphics.CENTER, startRec, 0);
g.drawText("HIGHSCORE", 20, 275, Color.BLACK, 50, AndroidGraphics.LEFT,
highRec, 0);
g.drawText("MORE APPS", g.getWidth() - 20, 275, Color.BLACK, 50,
AndroidGraphics.RIGHT, moreRec, 0);
if (Settings.soundEnabled)
g.drawPixmap(Assets.buttons, new Rect(0, 0, 100, 100), new Rect(0,
380, 100, 480));
else
g.drawPixmap(Assets.buttons, new Rect(100, 0, 200, 100), new Rect(
0, 380, 100, 480));
}
DrawText yöntemi:
@Override
public void drawText(String text, int x, int y, int color, int size,
int position, Rect bounds, int rotation) {
if (position == LEFT)
paint.setTextAlign(Paint.Align.LEFT);
else if (position == CENTER)
paint.setTextAlign(Paint.Align.CENTER);
else if (position == RIGHT)
paint.setTextAlign(Paint.Align.RIGHT);
else
return;
paint.setColor(color);
Typeface typeface = Typeface.createFromAsset(assets, "typewrite.TTF");
paint.setTypeface(typeface);
paint.setTextSize(size);
if (bounds != null) {
Rect rec = new Rect();
paint.getTextBounds(text, 0, text.length(), rec);
bounds.bottom = y;
bounds.top = y - rec.height();
if (position == CENTER) {
bounds.left = x - rec.width()/2;
bounds.right = x + rec.width()/2;
} else if (position == RIGHT) {
bounds.left = x - rec.width();
bounds.right = x;
} else if (position == LEFT) {
bounds.left = x;
bounds.right = x + rec.width();
} else
return;
}
canvas.save();
canvas.rotate(rotation, x, y);
canvas.drawText(text, x, y, paint);
canvas.restore();
}
Bellek sızıntısı çizim kodunuzda değil. Bakılması olası bir yer, [etkinlik yaşam döngüsü] (http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle) kodunuzdadır. Günlükler, bir istemci/sunucu mimarisi kullandığınızı gösterir; Başka bir IPC veya ağ kodunuzda olabilir. –
Yuo emin misiniz? DrawText() yöntemini kaldırdığımda, program artık çöküyor. – Daniel
Hmm. Yazıyı her çizdiğinizde program başladığında fontunuzu bir kez yüklemeyi deneyin. –