Используя LeakCanary, я обнаружил утечку памяти, из-за которой произошел такой журнал.
HttpsURLConnection$NoPreloadHolder.defaultHostnameVerifier ->
MainActivity$16.this$0 ->
MainActivity
Единственная часть в моем коде, в которой упоминается HttpsUrlConnection
, - это.
static SSLContext sc;
private void handleSSLHandshake() {
try{
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}};
sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
}catch (Exception e){
Log.d(TAG, "handleSSL err: "+e.getMessage());
}
}
Если я правильно помню, этот код предназначен для того, чтобы Volley принимал запросы https.Я видел сообщение, в котором говорится, что мне нужно закрыть URLConnection
, но HttpsURLConnection
не имеет метода для его закрытия.Настройка SSlContext
в static
ничего не изменила.
Я звоню handleSSLHandshake()
на onCreate()
MainActivity.
Это предыдущий handleSSLHandshake()
метод.
private void handleSSLHandshake() {
try{
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
}catch (Exception e){
Log.d(TAG, "handleSSL err: "+e.getMessage());
}
}