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 o开发者_开发技巧n 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.
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.
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: Reload activity in Android
精彩评论