diff --git a/src/com/android/contacts/ui/EditContactActivity.java b/src/com/android/contacts/ui/EditContactActivity.java
index 269e63b..cc2d840 100644
--- a/src/com/android/contacts/ui/EditContactActivity.java
+++ b/src/com/android/contacts/ui/EditContactActivity.java
@@ -255,9 +255,7 @@
         super.onDestroy();
 
         for (Dialog dialog : mManagedDialogs) {
-            if (dialog.isShowing()) {
-                dialog.dismiss();
-            }
+            dismissDialog(dialog);
         }
     }
 
@@ -321,6 +319,20 @@
     }
 
     /**
+     * Dismiss the given {@link Dialog}.
+     */
+    static void dismissDialog(Dialog dialog) {
+        try {
+            // Only dismiss when valid reference and still showing
+            if (dialog != null && dialog.isShowing()) {
+                dialog.dismiss();
+            }
+        } catch (Exception e) {
+            Log.w(TAG, "Ignoring exception while dismissing dialog: " + e.toString());
+        }
+    }
+
+    /**
      * Check if our internal {@link #mState} is valid, usually checked before
      * performing user actions.
      */
@@ -695,10 +707,7 @@
                 Toast.makeText(context, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show();
             }
 
-            // Only dismiss when valid reference and still showing
-            if (progress != null && progress.isShowing()) {
-                progress.dismiss();
-            }
+            dismissDialog(progress);
 
             // Stop the service that was protecting us
             context.stopService(new Intent(context, EmptyService.class));
