Every time I minimize my App it instantly crashes. The Error is the following: Also stackoverflow demands i add more than just code so here is some text. Also stackoverflow demands i add more than just code so here is some text. Also stackoverflow demands i add more than just code so here is some text. Also stackoverflow demands i add more than just code so here is some text. Also stackoverflow demands i add more than just code so here is some text. Also stackoverflow demands i add more than just code so here is some text.
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)
Is there some error in my Thread logic?
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 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();
}
}
*/
}
});
}
And here is my Gameactivity Class
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));
}
}