Merge "Slow widget memory leak." into honeycomb
diff --git a/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java b/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java
index 631bf84..cc06349 100644
--- a/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java
+++ b/src/com/android/browser/widget/BookmarkThumbnailWidgetService.java
@@ -109,7 +109,10 @@
             int[] ids = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
             if (ids != null) {
                 for (int id : ids) {
-                    mFactories.remove(id);
+                    BookmarkFactory bf = mFactories.remove(id);
+                    // Workaround a known framework bug
+                    // onDestroy is currently never called
+                    bf.onDestroy();
                 }
             }
         } else if (ACTION_CHANGE_FOLDER.equals(action)) {
@@ -309,9 +312,18 @@
 
         @Override
         public void onDestroy() {
-            recycleBitmaps();
             SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
             prefs.unregisterOnSharedPreferenceChangeListener(this);
+
+            // Workaround known framework bug
+            // This class currently leaks, so free as much memory as we can
+            recycleBitmaps();
+            mBookmarks.clear();
+            mBreadcrumbs.clear();
+            if (mLoadTask != null) {
+                mLoadTask.cancel(false);
+                mLoadTask = null;
+            }
         }
 
         @Override