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;
}
}
我更改了一些内容,现在可以使用了。老实说,我不知道发生了什么,但我很高兴它现在没有发生。
所以我正在尝试使用 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;
}
}
我更改了一些内容,现在可以使用了。老实说,我不知道发生了什么,但我很高兴它现在没有发生。