From 272ccf242459834cfd7f5a0407eb96754b5717b8 Mon Sep 17 00:00:00 2001 From: Danny Baumann Date: Sat, 2 Feb 2013 12:45:15 +0100 Subject: 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 --- src/com/android/contacts/calllog/CallLogAdapterHelper.java | 14 +++++++------- 1 file 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 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() { -- cgit v1.2.3