I have an activity (FragmentActivity) that handles user registration. On a button click a DialogFragment is shown while the task is handled asynchronously in the activity. Then after the task has been handled, the FragmentDialog is dismissed. Everything works smoothly, even with configuration changes like changing orientation, but i discovered that if i pressed the home button while the background task is running, the app crashes at the point where it tries to dismiss the FragmentDialog and when i restart the app, i find the dialog is still running.
I searched and found lots of discussions, solutions and workarounds, here, here and here. But i have not been able to implement any of them to solve my problem.
Here's what i'm working with:
Method called on button click for signing up user:
private void startRegDialog(final String phoneNumber, String password) {
Log.i("tag", "startregdailog called");
verifiedUser = false;
//start Dialog fragment here.
final SignUpDialogFragment mDialogFragment = SignUpDialogFragment.newInstance();
mDialogFragment.show(getSupportFragmentManager(), "dailogFragment");
ParseUser CreateNewUser = new ParseUser();
CreateNewUser.setUsername(phoneNumber);
CreateNewUser.setPassword(password);
CreateNewUser.put("userVerified", verifiedUser);
Log.i("tag", "starting task");
CreateNewUser.signUpInBackground(new SignUpCallback() {
@Override
public void done(ParseException e) {
Log.i("tag", "task done");
//Dismiss Dialog after receiving result
if(mDialogFragment !=null){
mDialogFragment.dismiss();
}
if(e != null){
Log.i("Tag", "user not Created");
String errorMessage = e.getMessage().toString();
onError(errorMessage);
}
else {
Log.i("Tag", "userSuccessfully Created");
Intent VerifyAccount = new Intent(context, VerifyAccount.class);
VerifyAccount.putExtra("phoneNo", phoneNumber);
startActivity(VerifyAccount);
}
}
});
}
HERE IS THE LOGCAT OUTPUT
03-17 22:12:40.070: E/AndroidRuntime(16000): FATAL EXCEPTION: main
03-17 22:12:40.070: E/AndroidRuntime(16000): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1343)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1361)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.DialogFragment.dismissInternal(DialogFragment.java:189)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.support.v4.app.DialogFragment.dismiss(DialogFragment.java:155)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.example.razcat.CreateAccount$3.done(CreateAccount.java:273)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.parse.SignUpCallback.internalDone(SignUpCallback.java:39)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.parse.SignUpCallback.internalDone(SignUpCallback.java:1)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.parse.Parse$6$1.run(Parse.java:834)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.os.Handler.handleCallback(Handler.java:615)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.os.Handler.dispatchMessage(Handler.java:92)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.os.Looper.loop(Looper.java:155)
03-17 22:12:40.070: E/AndroidRuntime(16000): at android.app.ActivityThread.main(ActivityThread.java:5454)
03-17 22:12:40.070: E/AndroidRuntime(16000): at java.lang.reflect.Method.invokeNative(Native Method)
03-17 22:12:40.070: E/AndroidRuntime(16000): at java.lang.reflect.Method.invoke(Method.java:511)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
03-17 22:12:40.070: E/AndroidRuntime(16000): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
03-17 22:12:40.070: E/AndroidRuntime(16000): at dalvik.system.NativeStart.main(Native Method)
Please any help would be useful thanks.