summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser/widget
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2011-02-01 18:24:28 -0800
committerJohn Reck <jreck@google.com>2011-02-01 18:24:28 -0800
commit73eb105e5bb53356e171837bd6b13b29661806e3 (patch)
tree5282a7e5931d2183d4f0ab5f8b928dc5ddb0e28e /src/com/android/browser/widget
parent20b6f1f9fb045605cb7a91dec5df0775be20c50c (diff)
downloadpackages_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/com/android/browser/widget')
-rw-r--r--src/com/android/browser/widget/BookmarkThumbnailWidgetService.java16
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