views:

65

answers:

2

Hello all, I have a START and STOP button in the main screen of an App. there are some GUI and threads that are instantiated when I click on START. When I click on stop, I want everything to be stopped and the activity should come back to its origin state. To the state that is exactly same like when launched (when we tapped on App icon in mobile). Is it possible to do this? I tried with finish() , this killed the app and exited . I don't want to exit from main screen. rather, on clicking STOP I want app to come back to origin or born state. Thanks.

A: 

How are you running your threads? Are they vanilla threads or subclasses of AsyncTask?

If these are instances of an AsyncTask object, you can use the cancel() method to cancel it and then inside your doInBackground() method, you could check the isCancelled() method to see if it has indeed been canceled, and then exit gracefully.

Pseudo code below:

private YourTask taskRef;

public void btnStartHandler() {
    taskRef = new YourTask();
    taskRef.execute();
}

public void btnStopHandler() {
    taskRef.cancel();
}

and then, in your AsyncTask:

public Void doInBackground(Void... arg0) {
    // Background loop start
    if (this.isCancelled()) {
        return;
    }
    // Background loop continue...
}

If you're using threads, you can interrupt them and catch the exception and handle it there. Furthermore, you could create a method that you call from onCreate() called initApp() or something that initializes everything. You could also use that initApp() from the STOP button click handler to reset values back to startup defaults.

TJF
this was not what I was looking for, no such initapp() either.
If you pay attention, I suggested that you _create_ that method and call it from your `onCreate()`. A little more information on what you're doing would certainly be beneficial to getting the answer you're looking for.
TJF
+1 To compensate for whoever downvoted this informative reply.
hgpc
cool my bad... will try again
A: 

You can restart the activity with finish() and then call startActivity(getIntent());. This will effectively restart your activity and put it in its default state, no matter how it was started.

Before doing that make sure to cancel all threads or AsyncTasks as TJF suggested (you can and should do this in the onDestroy overload).

For more info about restarting an activity, and a discussion about pros and cons, see this question: http://stackoverflow.com/questions/3053761/reload-activity-in-android

hgpc