2012-01-22 3 views
6

私のゲームではほとんど終わりましたが、今日は本当に面倒な問題に遭遇しました。ゲームを開始して数秒待つだけで、プログラムは自動的にシャットダウンします。そして、私はそれを爆発させていません。私のlogcatのエラーは何ですか?

これは私のlogcatを示しものです:

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. 

私はプログラムがクラッシュしたかわからないので、私は共有するため、残念ながら何のコードを持っていません。

EDIT:描画コード:

@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メソッド:

@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

メモリリークが描画コードにありません。あなたの[アクティビティライフサイクル](http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle)のコードを見てください。ログは、クライアント/サーバーアーキテクチャを使用していることを示しているようです。 IPCまたはネットワークコードに別のものが含まれている可能性があります。 –

+0

よろしいですか? drawText()メソッドを削除すると、プログラムはクラッシュします。 – Daniel

+2

Hmm。テキストを描画するたびにではなく、プログラムの起動時にフォントを一度読み込んでみてください。 –

答えて

10

あなたはどこかでメモリリークがあります。それを追跡するために使用できるツールについては、開発者ドキュメントのthis blog postを参照してください。 Androidアプリケーションでメモリがリークするのを防ぐためのヒントは、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. 

それは2くらいのメモリ(または)メモリリークを使用してあなたのゲームを思わ。 thisディスカッションに記載されている技術のいくつかを使用してプロセスのメモリ使用量を記録し、そこから取得する必要があります。

+0

しかし、私はちょうどいくつかのテキストと単色の背景を描いているときにどのようにすることができますか?それは多くの記憶を取るべきではありません。何をすればよいでしょうか? – Daniel

+2

@ダニエル - あなたのコードがあなたが記述したほどシンプルであれば、それを完全に投稿して、どこが漏れているのかを見ることができます。 –

+0

私は今それをやった。 – Daniel

1

シングルステップデバッグでは、詳細エラーが表示されます。layout_height属性を指定する必要があります。私の状況ではうまくいきました。

関連する問題