diff options
-rw-r--r-- | src/com/android/browser/Controller.java | 6 | ||||
-rw-r--r-- | src/com/android/browser/CrashRecoveryHandler.java | 11 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java index 457b1c47..454b25a8 100644 --- a/src/com/android/browser/Controller.java +++ b/src/com/android/browser/Controller.java @@ -754,6 +754,12 @@ public class Controller /* package */ Bundle createSaveState() { Bundle saveState = new Bundle(); mTabControl.saveState(saveState); + // This method is called multiple times.Need to + // guard against TabControl not having any tabs + // during the destroy cycles which looses all the + // existing saved information. + if (saveState.isEmpty()) + return null; return saveState; } diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java index bcdf8b03..c02eb075 100644 --- a/src/com/android/browser/CrashRecoveryHandler.java +++ b/src/com/android/browser/CrashRecoveryHandler.java @@ -109,7 +109,9 @@ public class CrashRecoveryHandler { } public void backupState() { - mForegroundHandler.postDelayed(mCreateState, BACKUP_DELAY); + // Only write if we are not already destroyed + if (mController.getTabControl() != null) + mForegroundHandler.postDelayed(mCreateState, BACKUP_DELAY); } private Runnable mCreateState = new Runnable() { @@ -118,8 +120,11 @@ public class CrashRecoveryHandler { public void run() { try { final Bundle state = mController.createSaveState(); - Message.obtain(mBackgroundHandler, MSG_WRITE_STATE, state) - .sendToTarget(); + // block write of null values + if (state != null && mController.getTabControl() != null) { + Message.obtain(mBackgroundHandler, MSG_WRITE_STATE, state) + .sendToTarget(); + } // Remove any queued up saves mForegroundHandler.removeCallbacks(mCreateState); } catch (Throwable t) { |