Fixed
Status Update
Comments
cu...@google.com <cu...@google.com>
ap...@google.com <ap...@google.com> #2
A couple of questions:
1. Have you saw crash in real device or only in simulators?
2. Do you use dynamic feature for language ID?
1. Have you saw crash in real device or only in simulators?
2. Do you use dynamic feature for language ID?
Description
While this version and 1.1.0-alpha01 solved many issues using ViewModels and LiveData, leaks are still happening.
In particular, the culprit seems to be FingerprintManager which holds a strong reference to the activity context.
Tested on BUILD INFO
STEPS TO REPRODUCE
NUMBER OF TIMES YOU WERE ABLE TO REPRODUCE - 10/10
Tracking the references to the context (LoginActivity) i found that FingerprintManager eventually receives the value through the BiometricManager.from(Context) method when BiometricManager.canAuthenticate(Int) is invoked, so i tried to use applicationContext to try and resolve the leak, but it happened anyway (file: LoginActivity.kt:190).
Eventually I found out that the possible cause may be the BiometricFragment class, specifically the BiometricFragment.authenticate(BiometricPromp.PromptInfo, BiometricPrompt.CryptoObject) method. The BiometricFragment instance uses the same method in the authenticate function, which gets the parent activity using getActivity() and then passes the value that will eventually reach FingerprintManager.
I don't believe there are any other places in the code where i pass an activity context, and I know that the value passed to create the BiometricPrompt object (file: LoginActivity.kt:195) is only used to get a BiometricViewModel instance and the FragmentActivity is never used again.
Leak results: