В чем ошибка в моем logcat? - PullRequest
       1

В чем ошибка в моем logcat?

7 голосов
/ 22 января 2012

Я почти закончил свою игру сейчас, но сегодня я столкнулся с реальной проблемой раздражения.Когда я запускаю игру и просто жду несколько секунд, программа автоматически выключается.И у меня нет объяснения этому.

Вот что показывает мой 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 com.JDLApps.Snake.FrameWork.AndroidFastRenderView@4050f950 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} - receiver=android.app.LoadedApk$ReceiverDispatcher$InnerReceiver@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.

У меня, к сожалению, нет кода, которым можно поделиться, потому что я не знаю, были ли сбои программы.

РЕДАКТИРОВАТЬ: код чертежа:

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

Ответы [ 3 ]

11 голосов
/ 22 января 2012

У вас где-то утечка памяти.См. эту запись в блоге в документации разработчика, чтобы найти инструменты, которые можно использовать для ее отслеживания.Также см. в этом блоге , где приведены советы по программированию, позволяющие избежать утечки памяти в приложениях Android.

4 голосов
/ 22 января 2012
~ Channel is unrecoverably broken and will be disposed!  

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

Кажется, ваша игра использует две большие утечки памяти (или) памяти.Возможно, вам потребуется зарегистрировать использование памяти вашим процессом, используя некоторые методы, описанные в этом обсуждении, и взять оттуда.

1 голос
/ 06 августа 2013

При одношаговой отладке я получил ошибку детализации: вы должны указать атрибут layout_height в .... Это сработало для моей ситуации.

...