diff options
| author | John Reck <jreck@google.com> | 2011-02-01 18:24:28 -0800 |
|---|---|---|
| committer | John Reck <jreck@google.com> | 2011-02-01 18:24:28 -0800 |
| commit | 73eb105e5bb53356e171837bd6b13b29661806e3 (patch) | |
| tree | 5282a7e5931d2183d4f0ab5f8b928dc5ddb0e28e /src | |
| parent | 20b6f1f9fb045605cb7a91dec5df0775be20c50c (diff) | |
| download | packages_apps_Browser-73eb105e5bb53356e171837bd6b13b29661806e3.tar.gz packages_apps_Browser-73eb105e5bb53356e171837bd6b13b29661806e3.tar.bz2 packages_apps_Browser-73eb105e5bb53356e171837bd6b13b29661806e3.zip | |
Slow widget memory leak.
Bug: 3369806
Framework currently holds a reference to widget factories forever
and doesn't call onDestroy. This causes a large memory leak in
browser since that means bitmaps are held in memory forever. This
explicitly calls onDestroy and tries to free as much memory as possible.
It doesn't fix the problem, just slows the bleeding.
Change-Id: I80832941aa75e30b3b6c951fab2c9cb0a7ed477d
Diffstat (limited to 'src')
| -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 631bf84d1..cc06349b0 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 |
