I ran into these issues too and the only solution I found so far that works
in any case (rotation, home button & restart activity, sliding out keyboard,
killing an app etc.) is using an AsyncTask.
I'm not a big fan of AsyncTasks normally but to show and dismiss a
ProgressDialog this seems to be a fair solution:
private ProgressDialog progressDialog;
AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(MyActivity.this);
// some progressDialog setter calls
progressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// do your background stuff
}
@Override
protected void onPostExecute(Void result) {
dismissProgressDialog();
}
}.execute();
private void dismissProgressDialog() {
try {
progressDialog.dismiss();
}
catch (Exception e) {}
}
@Override
protected void onDestroy() {
super.onDestroy();
dismissProgressDialog();
}
No fiddling around with static variables which could cause problems in a
multithreaded environment, no worries about the activity's lifecycle, no
worries about configuration changes.
Honestly I don't understand why showing and dismissing a ProgressDialog is
such a hassle. I would expect the framework do handle this for us
transparently.
And I don't think it's the price we have to pay for having a real
multithreaded environment.
Of course it get's slightly more difficult if the task can be cancelled or
if you want to keep the background task running and show the progress dialog
whenever the ui is shown.
For long lasting tasks like initializing a large database upon first start
of an app or a file download I recommend using a Service and using the
activity as gui to show the Service's progress.
I elaborated on that solution in this thread: http://bit.ly/qim7ov (last
post).
Emanuel Moecklin
1gravity LLC
--
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