diff options
author | Patrick Dubroy <dubroy@google.com> | 2011-01-13 17:55:37 -0800 |
---|---|---|
committer | Patrick Dubroy <dubroy@google.com> | 2011-01-14 14:13:31 -0800 |
commit | ec84c3a189e4aa70aa6ea8ba712e5a4f260a153b (patch) | |
tree | be5f82da1bec89ee491154bbc001bc8523e3b531 /core/java/android/widget | |
parent | 2150553dc374204a1cb3033ed3fa65c2f22dd5e7 (diff) | |
download | frameworks_base-ec84c3a189e4aa70aa6ea8ba712e5a4f260a153b.zip frameworks_base-ec84c3a189e4aa70aa6ea8ba712e5a4f260a153b.tar.gz frameworks_base-ec84c3a189e4aa70aa6ea8ba712e5a4f260a153b.tar.bz2 |
Allow old view hierarchy to be GC'ed more quickly during rotation.
Diffstat (limited to 'core/java/android/widget')
-rw-r--r-- | core/java/android/widget/AdapterViewAnimator.java | 6 | ||||
-rw-r--r-- | core/java/android/widget/ProgressBar.java | 4 | ||||
-rw-r--r-- | core/java/android/widget/RemoteViewsAdapter.java | 9 |
3 files changed, 13 insertions, 6 deletions
diff --git a/core/java/android/widget/AdapterViewAnimator.java b/core/java/android/widget/AdapterViewAnimator.java index ec8e93c..1b39371 100644 --- a/core/java/android/widget/AdapterViewAnimator.java +++ b/core/java/android/widget/AdapterViewAnimator.java @@ -986,4 +986,10 @@ public abstract class AdapterViewAnimator extends AdapterView<Adapter> public void willBeAdvancedByHost() { } + + @Override + protected void onDetachedFromWindow() { + mAdapter = null; + super.onDetachedFromWindow(); + } } diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java index 5b143fe..ef4e4e0 100644 --- a/core/java/android/widget/ProgressBar.java +++ b/core/java/android/widget/ProgressBar.java @@ -1004,9 +1004,11 @@ public class ProgressBar extends View { @Override protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); if (mIndeterminate) { stopAnimation(); } + // This should come after stopAnimation(), otherwise an invalidate message remains in the + // queue, which can prevent the entire view hierarchy from being GC'ed during a rotation + super.onDetachedFromWindow(); } } diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java index a7bff62..df1f4bf 100644 --- a/core/java/android/widget/RemoteViewsAdapter.java +++ b/core/java/android/widget/RemoteViewsAdapter.java @@ -152,6 +152,7 @@ public class RemoteViewsAdapter extends BaseAdapter { if (callback != null) { callback.onRemoteAdapterDisconnected(); } + adapter.mCache.reset(); } public IRemoteViewsFactory getRemoteViewsFactory() { @@ -657,11 +658,9 @@ public class RemoteViewsAdapter extends BaseAdapter { try { remoteViews = factory.getViewAt(position); itemId = factory.getItemId(position); - } catch (Exception e) { - // Print the error - Log.e(TAG, "Error in updateRemoteViews(" + position + "): " + - e.getMessage()); - e.printStackTrace(); + } catch (Throwable t) { + Log.e(TAG, "Error in updateRemoteViews(" + position + "): " + t.getMessage()); + t.printStackTrace(); // Return early to prevent additional work in re-centering the view cache, and // swapping from the loading view |