diff options
author | Danny Baumann <dannybaumann@web.de> | 2013-02-02 12:45:15 +0100 |
---|---|---|
committer | Danny Baumann <dannybaumann@web.de> | 2013-02-02 12:48:41 +0100 |
commit | 272ccf242459834cfd7f5a0407eb96754b5717b8 (patch) | |
tree | cf46ad57d8d6095e20b76caff4db7d6cdc7b6981 | |
parent | e5eb971effcfbfd475113a1853794e5221eaadf0 (diff) | |
download | packages_apps_Contacts-272ccf242459834cfd7f5a0407eb96754b5717b8.tar.gz packages_apps_Contacts-272ccf242459834cfd7f5a0407eb96754b5717b8.tar.bz2 packages_apps_Contacts-272ccf242459834cfd7f5a0407eb96754b5717b8.zip |
Fix threads running after entering call log, possibly affecting battery
life.
When having entered the call log or the call stats activities once, the
contact lookup thread (which wakes once per second) continued to run
even after leaving the activity.
The root cause for that was that the ViewTreeObserver obtained at
registerOnPreDrawListener() time was no longer valid when
unregisterOnPreDrawListener() was called. Fix that by storing a
reference to the observed view instead of the observer and fetching the
current observer when needed.
Change-Id: I3209712a52371f99772f522d03bc6b209272089c
-rw-r--r-- | src/com/android/contacts/calllog/CallLogAdapterHelper.java | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/com/android/contacts/calllog/CallLogAdapterHelper.java b/src/com/android/contacts/calllog/CallLogAdapterHelper.java index a570e5c2b..a64fc8898 100644 --- a/src/com/android/contacts/calllog/CallLogAdapterHelper.java +++ b/src/com/android/contacts/calllog/CallLogAdapterHelper.java @@ -212,7 +212,7 @@ public class CallLogAdapterHelper implements ViewTreeObserver.OnPreDrawListener */ private final LinkedList<ContactInfoRequest> mRequests; - private ViewTreeObserver mViewTreeObserver = null; + private View mOnPreDrawObservedView = null; private Handler mHandler = new Handler() { @Override @@ -266,9 +266,9 @@ public class CallLogAdapterHelper implements ViewTreeObserver.OnPreDrawListener public void registerOnPreDrawListener(View v) { // Listen for the first draw - if (mViewTreeObserver == null) { - mViewTreeObserver = v.getViewTreeObserver(); - mViewTreeObserver.addOnPreDrawListener(this); + if (mOnPreDrawObservedView == null) { + mOnPreDrawObservedView = v; + v.getViewTreeObserver().addOnPreDrawListener(this); } } @@ -276,10 +276,10 @@ public class CallLogAdapterHelper implements ViewTreeObserver.OnPreDrawListener * Stop receiving onPreDraw() notifications. */ private void unregisterPreDrawListener() { - if (mViewTreeObserver != null && mViewTreeObserver.isAlive()) { - mViewTreeObserver.removeOnPreDrawListener(this); + if (mOnPreDrawObservedView != null) { + mOnPreDrawObservedView.getViewTreeObserver().removeOnPreDrawListener(this); + mOnPreDrawObservedView = null; } - mViewTreeObserver = null; } public void invalidateCache() { |