我是一名Android初学者,目前正在为一个Android应用程序编程,该应用具有以下粗糙的框架,您通常会在教程中找到游戏循环。
该应用程序具有一个Activity类,一个View类和一个用于游戏循环的线程类。
如果使用thread.start()创建曲面,则线程将启动。
一切正常,但是我的问题是,如果应用在后台运行(不再可见),以后将再次激活。该应用程序崩溃了。调试器告诉我“线程已启动”
让我简短地向您展示结构
活动类:
public class TestActivity extends Activity{
...
protected void onCreate(){
...
test = newTestView(this);
setContentView(test)
...
}
...
}
线程类:
public class Test extends Thread{
...
public void setrunning(boolean run)
{
isrunning=run;
}
public void run(){
...
while (isRunning) {
...
theView.onDraw(theCanvas);
...
}
View类:
public class TestView extends SurfaceView{
...
public void surfaceDestroyed(SurfaceHolder holder) {
theGameLoopThread.setRunning(false);
theGameLoopThread.join();
}
public void surfaceCreated(SurfaceHolder holder) {
theGameLoopThread.setRunning(true);
theGameLoopThread.start();
}
...
}
我认为威胁还没有结束,并且仍然处于已暂停状态,并且如果再次创建表面并且应用程序崩溃了,则无法重新启动。 如果我在
中使用if循环if(theGameLoopThread.getState()==Thread.State.NEW)
{theGameLoopThread.start();}
如果线程不是新线程,则避免启动,因此屏幕仅是黑色的,因为onDraw方法将不会运行。
我如何重新启动威胁或杀死并重新开始?
我测试了Thread.join(),Thread.resume()等。
有一个想法或可以帮助纠正我的应用程序结构吗?
谢谢 Speisezwiebel
答案 0 :(得分:0)
我认为在以下代码的else块中创建线程的新实例:
if(theGameLoopThread.getState()==Thread.State.NEW)
{theGameLoopThread.start();}
将解决您的问题。