线程循环崩溃

时间:2018-09-27 09:59:27

标签: android multithreading state

我是一名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

1 个答案:

答案 0 :(得分:0)

我认为在以下代码的else块中创建线程的新实例:

if(theGameLoopThread.getState()==Thread.State.NEW)
            {theGameLoopThread.start();}

将解决您的问题。