commit | 6f1f014463e428ebeb4c347a1e210efc98f88f8f | [log] [tgz] |
---|---|---|
author | Yiqun Wu <yiqunw@google.com> | Fri Oct 30 22:26:40 2020 +0000 |
committer | Yiqun Wu <yiqunw@google.com> | Wed Nov 04 04:36:48 2020 +0000 |
tree | 73d4176eb7031357dae202491ee6a831965df48e | |
parent | 1cbba44779d361048f0b5eddbfb33d473469e754 [diff] |
Prevent memory leak when switching tabs Set adapter will register RecyclerView as observer, which creates loop references. By setting adapter to null, it will break the loop and have ViewHolders get recycled on fragment destory view. Bug: 170610268 Test: run memory profiler when switch tabs Change-Id: Ice3abe8b3bcfaaac1f052a51283dffefef469ffb
diff --git a/src/com/android/car/dialer/ui/common/DialerListBaseFragment.java b/src/com/android/car/dialer/ui/common/DialerListBaseFragment.java index 492d3f0..df21cde 100644 --- a/src/com/android/car/dialer/ui/common/DialerListBaseFragment.java +++ b/src/com/android/car/dialer/ui/common/DialerListBaseFragment.java
@@ -142,4 +142,12 @@ mRecyclerView.getPaddingEnd(), mRecyclerView.getPaddingBottom()); } + + @Override + public void onDestroyView() { + super.onDestroyView(); + mRecyclerView.setAdapter(null); + mRecyclerView.setLayoutManager(null); + mRecyclerView = null; + } }
diff --git a/src/com/android/car/dialer/ui/search/ContactResultsFragment.java b/src/com/android/car/dialer/ui/search/ContactResultsFragment.java index 1a44217..b392f97 100644 --- a/src/com/android/car/dialer/ui/search/ContactResultsFragment.java +++ b/src/com/android/car/dialer/ui/search/ContactResultsFragment.java
@@ -122,9 +122,9 @@ @Override public void onDestroyView() { - super.onDestroyView(); getRecyclerView().removeOnScrollListener(mOnScrollChangeListener); mToolbar.unregisterOnSearchListener(this); + super.onDestroyView(); } @Override