1

i'm having a problem with restarting my game after clicking home or return button on android.

I've found partial solution in thread: Android crash when app is closed and reopened, but the game after restarting dosen't work properly. It only shows images/sprites which also moves, but dosen't read touches.

//this is in game view

public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) { // ce se spremeni zaslon

}

public void surfaceCreated(SurfaceHolder holder) {

    createSprites();
    start();

}

public void start() {
    loop.setRunning(true);
    if (!mGameIsRunning) {
        loop.start();

        mGameIsRunning = true;
    } else {
        loop.onResume();
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    boolean retry = true;
    while (retry) {
        try {
            loop.join();
            retry = false;

        } catch (InterruptedException e) {
        }
    }
}

//and this is game thread

    while (running) {
        canvas = null;
        try{
            canvas = this.surfaceHolder.lockCanvas();
            synchronized (surfaceHolder) {
                beginTime = System.currentTimeMillis();
                framesSkipped = 0;
                this.gameView.update();
                this.gameView.render(canvas);
                synchronized (mPauseLock) {
                    while (mPaused) {
                        try {
                            mPauseLock.wait();
                        } catch (InterruptedException e) {
                        }
                    }
                }
                timeDiff = System.currentTimeMillis() - beginTime;
                sleepTime = (int)(FRAME_PERIOD - timeDiff);

                if (sleepTime > 0){
                    try{
                        Thread.sleep(sleepTime);                        
                    } catch (InterruptedException e) {
                    }
                }
            }
        } finally {
            if (canvas != null){
                surfaceHolder.unlockCanvasAndPost(canvas);
            }

        }
    }
}
public void onPause() {
    synchronized (mPauseLock) {
        mPaused = true;
    }
}

public void onResume() {
    synchronized (mPauseLock) {
        mPaused = false;
        mPauseLock.notifyAll();
    }
}

Can anyone tell me if there is any mistake or any other solution.

Thanks for help.

Or if anyone could tell me for a good way to stop game and restart it, please?

I fixed it so that it works when i hit home, but when i hit back and restart it, I get black screen.

// current gameview code

public void surfaceCreated(SurfaceHolder holder) {
    if (loop==null)
        loop = new GameLoop(getHolder(), this);
     if(loop.getState() == Thread.State.TERMINATED)
     {
         loop = new GameLoop(getHolder(), this);
     }   

    start();

}

public void start() {
    if (!mGameIsRunning) {
        mGameIsRunning = true;
        loop.setRunning(true);
        loop.start();

    } else {
        loop.onResume();
        loop.start();
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    loop.onPause(); 
}

I have a feeling that the problem is in surfaceDestroy method, but I'm not sure since I don't know what is the difference between hitting home or back key.

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
schmru
  • 591
  • 3
  • 8
  • 29

0 Answers0