2012-01-22 9 views
6

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(); 
} 
+0

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. –

+0

Yuo emin misiniz? DrawText() yöntemini kaldırdığımda, program artık çöküyor. – Daniel

+2

Hmm. Yazıyı her çizdiğinizde program başladığında fontunuzu bir kez yüklemeyi deneyin. –

cevap

10

Bir yerde bir bellek sızıntınız var. Aşağıdakini izlemek için kullanabileceğiniz araçlar için geliştirici belgelerinde this blog post'a bakın. Android uygulamalarında belleğe sızmayı önlemek için programlama ipuçları için bkz. this blog post.

3
~ Channel is unrecoverably broken and will be disposed! 

01-22 16:21:21.443: INFO/ActivityManager(73): Low Memory: No more background processes. 

İki kadar bellek (veya) bellek sızıntısı kullanarak oyun gibi görünüyor. İşleminizin bellek kullanımını, this tartışmada açıklanan bazı teknikleri kullanarak günlüğe kaydetmeniz ve oradan almanız gerekebilir.

+0

Ama bu sadece bir yazı çizerken ve tek renkli arka plan olduğum zaman nasıl olabilir? Bu fazla bellek almamalı. Ne yapmalıyım? – Daniel

+2

@Daniel - kodunuz sizin anlattığınız kadar basitse, tümüyle yayınlayın ve nerede sızıyor olabileceğine bakabiliriz. –

+0

Şimdi yaptım .. – Daniel

1

Tek adımlı hata ayıklama ile ayrıntı hatasını aldım: layout_height özniteliğini sağlamanız gerekir .... Durumum için çalıştım.