Android Java App 在最小化/退出时兑现

每次我最小化我的应用程序时它都会立即崩溃。 错误如下: stackoverflow 还要求我添加的不仅仅是代码,所以这里有一些文本。 stackoverflow 还要求我添加的不仅仅是代码,所以这里有一些文本。 stackoverflow 还要求我添加的不仅仅是代码,所以这里有一些文本。 stackoverflow 还要求我添加的不仅仅是代码,所以这里有一些文本。 stackoverflow 还要求我添加的不仅仅是代码,所以这里有一些文本。 stackoverflow 还要求我添加的不仅仅是代码,所以这里有一些文本。

2021-03-19 22:12:11.243 6919-7009/com.example.zawarudo E/AndroidRuntime: FATAL EXCEPTION: Thread-2
    Process: com.example.zawarudo,PID: 6919
    java.lang.IllegalStateException: No recording in progress,forgot to call #beginRecording()?
        at android.graphics.RenderNode.endRecording(RenderNode.java:404)
        at android.view.Surface$HwuiContext.unlockAndPost(Surface.java:1029)
        at android.view.Surface.unlockCanvasAndPost(Surface.java:418)
        at android.view.SurfaceView$2.unlockCanvasAndPost(SurfaceView.java:1567)
        at com.example.zawarudo.GameLoopthread.run(GameLoopthread.java:53)

我的线程逻辑有错误吗?

public class GameLoopthread extends Thread {
    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(){
            Canvas c = null;
    
            while (running){
    
                try {
                    currentThread().sleep(17);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    
                try{
                    view.getHolder().setfixedSize(1080,1920);
                    c = view.getHolder().lockHardwareCanvas();
                                     
                    c.rotate(90);
                    synchronized (view.getHolder()){
                        view.onDraw(c);
                    }
                } finally {
                    {
    
        view.getHolder().unlockCanvasAndPost(c);
    
                            }
                        }
                    }
                }
            }




gameThread = new GameLoopthread(this);
            holder = getHolder();
            holder.addCallback(new SurfaceHolder.Callback() {
 
                @Override
                public void surfaceCreated(SurfaceHolder surfaceHolder) {
                    gameThread.setRunning(true);
                    gameThread.start();
                }
    
                @Override
                public void surfaceChanged(SurfaceHolder holder,int format,int width,int height) {
    
                }
    
                public void surfaceChanged(SurfaceHolder holder) {
    
                }
    
    
                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                    boolean retry = true;
                    gameThread.setRunning(false);
                    while (retry) {
                        try {
                            gameThread.join();
                            retry = false;
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }





public class GameView extends SurfaceView implements zaInterface {

    public GameMap tileMap = new GameMap();
    private SurfaceHolder holder;
    private GameLoopthread gameThread;

    public GameView(Context context) {
        super(context);

        screenheight = Resources.getSystem().getDisplayMetrics().heightPixels;;
        screenwidth = Resources.getSystem().getDisplayMetrics().widthPixels;

    
        gameThread = new GameLoopthread(this);
        holder = getHolder();
        holder.addCallback(new SurfaceHolder.Callback() {

            @Override
            public void surfaceCreated(SurfaceHolder surfaceHolder) {
                if (hasStarted==false) {
                    gameThread.setRunning(true);
                    gameThread.start();
                    hasStarted=true;
                }
                else{

                }
            }



            @Override
            public void surfaceChanged(SurfaceHolder holder,int height) {

            }

            public void surfaceChanged(SurfaceHolder holder) {

            }



            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
                /*
                boolean retry = true;
                gameThread.setRunning(false);
                while (retry) {
                    try {
                        gameThread.join();
                        retry = false;
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                 */
            }
        });
    }

这是我的游戏活动类

public class Gameactivity extends AppCompatactivity {

    private GameView GameView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        getWindow().setflags(WindowManager.LayoutParams.flaG_FULLSCREEN,WindowManager.LayoutParams.flaG_FULLSCREEN);
        getWindow().isactive();
        GameMap.initialize();
        GameView.initialize();
        setContentView(new GameView(this));
    }
}
tankwu111 回答:Android Java App 在最小化/退出时兑现

尝试在活动暂停时停止 SurfaceView。使用 stopView()

@Override
protected void onPause() {
    super.onPause();
    if (gameThread != null)
        gameThread.setRunning(false);
}
本文链接:https://www.f2er.com/726744.html

大家都在问