Verwendung Während meiner Android-Anwendung Entwicklung erhalte ich diese Warnung in meinem LogcatOkhttp zeigende Warnung durchgesickert, während mit Volley
WARNING: A connection to https://... was leaked. Did you forget to close a response body?
Ich verwende Okhttps als Transportschicht für das Volley für Netztelefonie.
class OkHttpStack extends HurlStack {
private final OkUrlFactory okUrlFactory;
OkHttpStack() {
this(new OkUrlFactory(new OkHttpClient()));
}
private OkHttpStack(OkUrlFactory okUrlFactory) {
if (okUrlFactory == null) {
throw new NullPointerException("Client must not be null.");
}
this.okUrlFactory = okUrlFactory;
}
@Override
protected HttpURLConnection createConnection(URL url) throws
IOException {
return okUrlFactory.open(url);
}
}
Für Request
synchronized RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(mContext,new OkHttpStack());
}
return mRequestQueue;
}
<T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
Schaffung Ich rufe URL wie dieses
public void postCall(final String Url, JSONObject Data, final ResponseCallback responseCallback){
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(mUrl+Url, Data,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG,response.toString());
responseCallback.onGettingResponse(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG,error.toString());
responseCallback.onError(error);
}
});
jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(
TIMEOUT_IN_SECONDS,
0,
0));
mRestApiCall.getInstance(mContext).addToRequestQueue(jsonObjectRequest.setTag(mRequestTag));
}
Von Okhttp Ausgaben tracker, las ich, dass wir jedes Mal schließen müssen, um die Antwort Körper zu vermeiden lecke aber ich verstehe es nicht, wie man das macht, während man Volley und Okhttp benutzt.
Abhängigkeiten:
compile 'com.android.volley:volley:1.0.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'
https://stackoverflow.com/questions/47025025/android-volley-memory-leaks –
Bitte entfernen Sie die HTTP-Protokollierung, die für dieses Problem einer der Gründe ist – Praveen