You can use Interrupt to strop a thread.

http://java.sun.com/docs/books/tutorial/essential/concurrency/interrupt.html

- Anurag Singh

On Fri, Apr 30, 2010 at 3:57 AM, Cameron.M.Johnson <
[email protected]> wrote:

> Hi There,
>
> I am basing my game off of the Lunar Lander demo.
>
> The problem I am having is my game not restoring its last saved state
> when it comes back into focus.
>
> When the game loses focus/quits it saves all the information to a
> Bundle correctly, then runs surfaceDestroyed() to shut down the
> thread.
>
> When I restart the game, I thought onCreate(Bundle savedInstanceState)
> method was supposed to always start first, then restore the saved
> Bundle if it is not "Null". But because it sees that I have started/
> created a thread last time, it jumps straight to surfaceCreated
> method.
>
> The only thing I can think of is to find a way to get rid/destroy the
> thread so that it runs onCreate at the start. However the stop() and
> destroy() methods for threads have been depreciated. Is there anyway
> to do this? Or is there a better method of saving an instance of the
> game?
>
> Basically when the game restarts it goes to surfaceCreated() instead
> of onCreate().
>
>
>
> Note: In surfaceDestroyed() if I force the application to crash here,
> that gives me an "Application has stopped unexpectedly" error which
> causes the thread to die. When I restart my game it runs onCreate,
> sees that there is a bundle saved and starts from where the game left
> off perfectly fine!
>
>
>
> ****BallDrop.java*****
> /** Called when the activity is first created. */
>    @Override
>    public void onCreate(Bundle savedInstanceState) {
>        super.onCreate(savedInstanceState);
>        requestWindowFeature(Window.FEATURE_NO_TITLE);
>        setContentView(R.layout.balldrop);
>
>        mBallDropView = (BallDropView) findViewById(R.id.BallDrop);
>        mBallDropThread = mBallDropView.getThread();
>        mBallDropView.setTextView((TextView) findViewById(R.id.text));
>
>        if (savedInstanceState == null) {
>            mBallDropThread.setState(BallDropThread.STATE_READY);
>        } else {
>                Bundle map = savedInstanceState.getBundle(ICICLE_KEY);
>            if (map != null) {
>                mBallDropThread.restoreState(map);
>            } else {
>                mBallDropThread.setState(BallDropThread.STATE_PAUSE);
>            }
>        }
>    }
>
> @Override
>    protected void onSaveInstanceState(Bundle outState) {
>        //Store the game state
>        super.onSaveInstanceState(outState);
>        outState.putBundle(ICICLE_KEY, mBallDropThread.saveState());
>    }
>
>
> ****BallDropView.java*****
>
> public void surfaceCreated(SurfaceHolder holder) {
>        // start the thread here so that we don't busy-wait in run()
>        // waiting for the surface to be created
>       // FIX FROM LUNAR LANDER --->
>        if(thread.getState()== Thread.State.TERMINATED){
>                thread = new BallDropThread(getHolder(), getContext(),
> getHandler());
>                thread.setRunning(true);
>                thread.start();
>      // <--- FIX FROM LUNAR LANDER
>        }else {
>                thread.setRunning(true);
>                thread.start();
>        }
>    }
>
>    /*
>     * Callback invoked when the Surface has been destroyed and must
> no longer
>     * be touched. WARNING: after this method returns, the Surface/
> Canvas must
>     * never be touched again!
>     */
>    public void surfaceDestroyed(SurfaceHolder holder) {
>        // we have to tell thread to shut down & wait for it to
> finish, or else
>        // it might touch the Surface after we return and explode
>        boolean retry = true;
>        thread.setRunning(false);
>        while (retry) {
>            try {
>                thread.join();
>                retry = false;
>            } catch (InterruptedException e) {
>            }
>        }
>       /* mBallDrop.finish();       //CAUSES APP TO CRASH ON EXIT
> WHICH KILLS THREAD*/
>    }
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]<android-developers%[email protected]>
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to