游戏循环不会破坏

时间:2014-08-03 08:11:10

标签: java android

背景 我已经创建了一个游戏循环来运行UI,但是当我从游戏界面推动后退按钮(SingleGameActivity)时,我会进入名为(StartLvlActivity)的关卡选择器菜单。如果我尝试重新进入游戏或从StartLvlActivity按下后退按钮,我会收到keyDispatchingTimedOut错误(ANR)。    当我写日志消息时,游戏活动(SingleGameActivity)只是暂停,而不是在我按下后退按钮时停止。当我关闭活动时,游戏循环从未被破坏。

08-03 09:56:12.130: I/Process(346): Sending signal. PID: 5763 SIG: 3
08-03 09:56:12.130: I/dalvikvm(5763): threadid=3: reacting to signal 3
08-03 09:56:12.333: I/dalvikvm(5763): Wrote stack traces to '/data/anr/traces.txt'
08-03 09:56:12.341: E/ActivityManager(346): ANR in com.coderogden.pongtennis (com.coderogden.pongtennis/.activities.StartLvlActivity)
08-03 09:56:12.341: E/ActivityManager(346): Reason: keyDispatchingTimedOut

问题 1.当我从游戏菜单中按下后退按钮时,为什么游戏循环没有被破坏?我的意思是,为什么在调用onPaused时没有调用surfaceDestroyed(onStop从未调用过,我也不知道为什么......)。

  1. 如何访问" /data/anr/traces.txt"

  2. 如何处理错误?

  3. 如果你能回答任何这些问题,我会非常感激!

    修改

    这是我从哪里开始并销毁线程的表面视图类(或者我刚刚启动它,因为当我按下"后退" -button时它不会关闭)。

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        thread.setRunning(true);
        thread.start();
        Log.d(TAG, " surface created");
    }
    
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        boolean retry = true;
        while (retry) {
            try {
                thread.join();
                retry = false;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        Log.d(TAG, " surface destroyed");
    }
    

    编辑2(使用解决方案!)

    通过更改这段代码修复了错误:

    boolean retry = true;
    while (retry) {
        try {
            thread.join();
            retry = false;
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    

    到此:

    thread.setRunning(false);
    

    WHY吗 是因为我需要在销毁它之前停止它吗?

0 个答案:

没有答案