Hello I found 2 memory leaks that I'd like to resolve.
After receiving the callback onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result)
, I want to setResult()
and call finish()
on ActivityB to go back to ActivityA.
Although this does work fine, it seems to cause 2 memory leaks after calling finish()
.
Here is the relevant code to reproduce the memory leak (ActivityB):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);;
BiometricPrompt biometricPrompt = biometricPromptInstance();
biometricPrompt.authenticate(buildPromptInfo());
}
private BiometricPrompt biometricPromptInstance(){
Executor executor = ContextCompat.getMainExecutor(this);;
BiometricPrompt.AuthenticationCallback callback = new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
}
@Override
public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
setResult(RESULT_OK);
//Causing leak: ////////////////////////////////////////////////
finish();
/////////////////////////////////////////////////////////////////
}
@Override
public void onAuthenticationFailed() {
}
};
return new BiometricPrompt(this, executor, callback);
}
private BiometricPrompt.PromptInfo buildPromptInfo(){
return new BiometricPrompt.PromptInfo.Builder()
.setTitle("Login")
.setSubtitle("Log in using your biometric credential")
.setNegativeButtonText("Cancel")
.build();
}