Phone 插页后完全没有反应

Phone completely unresponsive after interstitial

所以我正在尝试使用 youtube android 2D 游戏教程中的一些代码。 admob 插页式广告出现在我的 setContentView(game); 上。有时当我关闭测试广告时,我的屏幕会冻结。完全没有反应。我什至无法按主页按钮退出。

我认为线程中可能存在问题,但这并没有向我解释为什么 onTouchEvents 没有注册。如果这无法避免,我至少想给我的用户一个退出的机会。我该如何解决这个问题?什么会导致后退和主页按钮像这样停止工作?

import android.graphics.Canvas;
import android.view.SurfaceHolder;

public class MainThread extends Thread
{
    private int FPS = 30;
    private double averageFPS;
    private SurfaceHolder surfaceHolder;
    private GamePanel gamePanel;
    private boolean running;
    public static Canvas canvas;
public MainThread(SurfaceHolder surfaceHolder, GamePanel gamePanel)
{
    super();

    this.surfaceHolder = surfaceHolder;
    this.gamePanel = gamePanel;
}

@Override
public void run()
{
    long startTime;
    long timeMillis;
    long waitTime;
    long totalTime = 0;
    int frameCount =0;
    long targetTime = 1000/FPS;

    while(running) {
        startTime = System.nanoTime();
        canvas = null;

        //try locking the canvas for pixel editing
        try {
            canvas = this.surfaceHolder.lockCanvas();
            synchronized (surfaceHolder) {
                this.gamePanel.update();
                this.gamePanel.draw(canvas);
            }
        } catch (Exception e) {
        }
        finally{
            if(canvas!=null)
            {
                try {
                    surfaceHolder.unlockCanvasAndPost(canvas);
                }
                catch(Exception e){e.printStackTrace();}
            }
        }

        timeMillis = (System.nanoTime() - startTime) / 1000000;
        waitTime = targetTime-timeMillis;

        try{
            this.sleep(waitTime);
        }catch(Exception e){}

        totalTime += System.nanoTime()-startTime;
        frameCount++;
        if(frameCount == FPS)
        {
            averageFPS = 1000/((totalTime/frameCount)/1000000);
            frameCount =0;
            totalTime = 0;
            System.out.println(averageFPS);
        }
    }
}
public void setRunning(boolean b)
{
    running=b;
}
}

我更改了一些内容,现在可以使用了。老实说,我不知道发生了什么,但我很高兴它现在没有发生。