Fixed
Status Update
Comments
lp...@google.com <lp...@google.com> #3
This is due to a bug in Fragment - using 1.1.0-alpha02 of Preference uses a newer Fragment dependency, and fixes this issue.
ma...@gmail.com <ma...@gmail.com> #4
Actually, I just checked and it still crashes using 1.1.0-alpha02.
jb...@google.com <jb...@google.com> #5
Could you maybe upload a simpler project with reproduction steps? Or at least provide reproduction steps for the project you linked - Does it crash when using Preference 1.0.0?
This still seems suspiciously similar tohttps://issuetracker.google.com/issues/120240628 , which can not be reproduced with 1.1.0-alpha02 (following the reproduction steps in the first comment).
This still seems suspiciously similar to
ma...@gmail.com <ma...@gmail.com> #6
Hi guys. I can also confirm that it still crashes using preferences 1.1.0-alpha02. I ran the barebones sample project included in https://issuetracker.google.com/issues/120240628 on a Samsung Galaxy J2 Prime running Android 6.0.1.
If I use 1.0.0 version, the NPE issue will not appear. If I use any of the 1.1.0 alphas with/without fragments 1.1.0-alpha02, the NPE issue is there. This issue also exists for MultiSelectListPreference.
If I use 1.0.0 version, the NPE issue will not appear. If I use any of the 1.1.0 alphas with/without fragments 1.1.0-alpha02, the NPE issue is there. This issue also exists for MultiSelectListPreference.
Description
PreferenceFragmentCompat sets this adapter (PreferenceGroupAdapter), which implicitly registers an observer. PreferenceFragmentCompat never sets the adapter to null when the view is destroyed, so the observer keeps references to the RecyclerView and doesn't get gc'ed.
I've worked around this by explicitly setting the adapter to null in an override of onDestroyView, but since my component doesn't explicitly have ownership of the list handling, I'd argue that PreferenceFragmentCompat should do this cleanup.
It would be solved by setting the RecyclerView adapter to null in the fragment's onDestroyView.
Here's a memory dump.