0

I am creating an application that requires a thread. When I test the life cycle I get a weird result. When I run the app from eclipse everything is called correctly - onCreate() then onResume(). When I press the home button on my phone onPause() is called. However, when I relaunch it from my phone onResume() is never called. Does this mean my thread is not created and started again? Here are my classes:

public class RenderView extends SurfaceView implements Runnable {
    Thread thread = null;
    SurfaceHolder holder;
    boolean running = false;

    Bitmap frameBuffer;

    public RenderView(Context context, Bitmap frameBuffer) {
        super(context);
        holder = getHolder();
        this.frameBuffer = frameBuffer;
    }

    @Override
    public void run() {
        while(running) {
            if(!holder.getSurface().isValid()) {
                continue;
            }
            Canvas canvas = holder.lockCanvas();
            canvas.drawARGB(255, 150, 150, 10);
            holder.unlockCanvasAndPost(canvas);
        }
    }

    public void pause() {
        running = false;
        while(true) {
            try {
                thread.join();
            } catch(InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public void resume() {
        running = true;
        thread = new Thread(this);
        thread.start();
    }
}

public class GameHandler extends Activity {
    RenderView view;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("Game Handler", "onCreate called");
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                            WindowManager.LayoutParams.FLAG_FULLSCREEN);

        boolean isLandscape = this.getResources().getConfiguration().orientation ==
                Configuration.ORIENTATION_LANDSCAPE;
        int frameBufferWidth = isLandscape ? 1280 : 800;
        int frameBufferHeight = isLandscape ? 800: 1280;

        Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth, frameBufferHeight, Bitmap.Config.RGB_565);
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        float  scaleX = (float) frameBufferWidth / metrics.widthPixels;
        float scaleY = (float)  frameBufferHeight / metrics.heightPixels;

        view = new RenderView(this, frameBuffer);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.d("GameHandler ", "OnResume Called");
        view.resume();
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.d("GameHandler ", "onPaused Called");
        view.pause();
    }
}
Oleksii K.
  • 5,359
  • 6
  • 44
  • 72
Derek Dawson
  • 502
  • 5
  • 14

0 Answers0