diff options
Diffstat (limited to 'src/com/android/browser/widget/BookmarkThumbnailWidgetService.java')
-rw-r--r-- | src/com/android/browser/widget/BookmarkThumbnailWidgetService.java | 16 |
1 files changed, 14 insertions, 2 deletions
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 @@ public class BookmarkThumbnailWidgetService extends RemoteViewsService { 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 @@ public class BookmarkThumbnailWidgetService extends RemoteViewsService { @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 |