Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 线程导致离开时出现错误消息并返回游戏应用程序_Android_Multithreading - Fatal编程技术网

Android 线程导致离开时出现错误消息并返回游戏应用程序

Android 线程导致离开时出现错误消息并返回游戏应用程序,android,multithreading,Android,Multithreading,在玩我的线程游戏后点击主页,然后点击应用程序图标,然后再次点击我的应用程序图标,我得到一个digger已意外退出错误,它将我带回通用应用程序屏幕,此时我可以再次点击我的应用程序图标,它将我带到游戏中,它运行正常。我希望在我重启我的应用程序时,我应该对这个线程做些什么来防止那个恼人的消息。可能是在一个onStop或onPause方法中。以下是我的线程代码片段: getHolder().addCallback( new SurfaceHolder.Callback() { /

在玩我的线程游戏后点击主页,然后点击应用程序图标,然后再次点击我的应用程序图标,我得到一个digger已意外退出错误,它将我带回通用应用程序屏幕,此时我可以再次点击我的应用程序图标,它将我带到游戏中,它运行正常。我希望在我重启我的应用程序时,我应该对这个线程做些什么来防止那个恼人的消息。可能是在一个onStop或onPause方法中。以下是我的线程代码片段:

getHolder().addCallback(
    new SurfaceHolder.Callback() {
        //@Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            boolean retry = true;
            gameLoopThread.setRunning(false);
            while (retry) {
                try {
                    gameLoopThread.join();
                    retry = false;
                }
                catch (InterruptedException e) {}
            }
        }

        //@Override
        public void surfaceCreated(SurfaceHolder holder) {
            screenWidth =gameView.getWidth(); 
            screenHeight = gameView.getHeight(); 
            createSprites();
            gameLoopThread.setRunning(true);
            gameLoopThread.start();
        }

        //@Override
        public void surfaceChanged(SurfaceHolder holder, int format,
            int width, int height) {
        }
    });
我有一个gamethread类:

import android.graphics.Canvas;
import android.view.SurfaceHolder;
public class GameLoopThread extends Thread {

    static final long FPS = 10;
    private GameView view;
    private boolean running = false;
    public GameLoopThread(GameView view) {
        this.view = view;
    }
    public void setRunning(boolean run) {
        running = run;
    }

    @Override
    public void run() {
        long ticksPS = 200 / FPS;
        long startTime;
        long sleepTime;
        while (running) {
            Canvas c = null;
            startTime = System.currentTimeMillis();
            try {
                c = view.getHolder().lockCanvas();
                synchronized (view.getHolder()) {
                    view.onDraw(c);
                }
            } finally {
                if (c != null) {
                    view.getHolder().unlockCanvasAndPost(c);
                }
            }
            sleepTime = ticksPS - (System.currentTimeMillis() - startTime);
            try {
                if (sleepTime > 0)
                    sleep(sleepTime);
                else
                    sleep(10);
            } catch (Exception e) {}
        }
    }
}
我尝试的一件事是将surfaceDestroyed方法改为just

public void surfaceDestroyed(SurfaceHolder holder) {
  gameLoopThread.setRunning(false);
}

但这没用。

这是什么平台?安卓它应该被这样标记。这是很多格式不好的代码,您可能希望将其格式设置得更干净一点。此外,应用程序将出于某种原因生成错误消息。检查日志并将stacktrace添加到您的问题中。