2015-01-15 2 views
10

내 안드로이드 앱에서 발리 라이브러리를 사용하고 있습니다. 그것은 잘 동작하지만 OkHttp가 더 많은 개선점을 제공한다는 것을 알았습니다.Volley 라이브러리에서 OkHttp를 사용해야합니까?

Volley.newRequestQueue(mCtx.getApplicationContext(), new OkHttpStack()); 

내 OkHttpStack 클래스는 다음과 같습니다 :

public class OkHttpStack extends HurlStack { 
    private final OkUrlFactory mFactory; 

    public OkHttpStack() { 
     this(new OkHttpClient()); 
    } 

    public OkHttpStack(OkHttpClient client) { 
     if (client == null) { 
      throw new NullPointerException("Client must not be null."); 
     } 
     mFactory = new OkUrlFactory(client); 
    } 

    @Override protected HttpURLConnection createConnection(URL url) throws IOException { 
     return mFactory.open(url); 
    } 
} 

1) 그것은 가치가 내가 사용하는 발리로 OkHttp을 통합 한? 눈에 띄는 개선은 눈치 채지 못했지만 서버에서 SPDY 지원을 아직 구현하지 않았기 때문에 그럴 수 있습니다.

2) OkHttp의 향상된 기능 중 하나는 응답 캐싱입니다. 그러나 발리도 그렇게합니다. 이 문제는 다음과 유사합니까? https://github.com/square/okhttp/issues/680

3) 또한 Volley에서 두 개의 RequestQueues를 사용합니다. 하나는 JSON 용 &입니다. 두 대기열 모두에서 OkHttp를 사용해야합니까?

답변

3

잘 모르겠습니다.

그러나 나는 비슷한 입장에 있으며 "아니오, 지금은 아닙니다"의 측면에서 내려 가고 있습니다. 나는 약간의 아이디어를 가지고 있지만, 나는 정교하게 다룰 것이다 :

나는 내 용도로 발리 밑에서 OkHttp를 사용하는 것에 어떤 실질적인 이점도 발견하지 못했다. (내가 연결 한 HTTPS 서버는 SPDY를 지원하지 않으며, 이미 연결 풀링을하고 있으며 gzip 인코딩을 믿고 있습니다. Volley가 작업 캐시를 가지고 있음을 알고 있습니다.) 그리고 몇 백 K를 추가합니다. 단지 성능을 해칠 수있는 응용 프로그램, 나는 믿습니다.

OkHttp에는 무엇이 있고, Volley는이를 사용하도록 변경 될 수 있으며 실제 연결이 중단됩니다. 내 앱이 많은 요청을하고 많은 앱을 취소하기 때문에 가장 관심있는 부분입니다. 현재 발리 (Volley)는 연결 (또는 그 주변)을 여는 데 필요한 모든 요청을 실제로 멈추지 않으며 취소 된 것으로 표시하고 서버 응답을 버립니다.

이것은 의미 체계에서는 문제가 없지만 성능에 심각한 영향을줍니다. 특히, 내가 죽어가는 서버에 많은 요청을하고 그 요청이 시간 초과 될 경우, 시간이 지남에 따라 30 초 정도의 시간이 걸리는 Volley가 걸릴 것입니다. 대기하는 다른 요청은 그 시간을 사용하지 못합니다. 연결 시간이 초과 될 때까지 풀이 대기 중이므로 네트워크 연결.

그래서 "OkHttpStack"을 작성하고 #cancel() 이벤트를 OkHttp로 연결하고 실제로 연결을 중단하면 큰 도움이 될 것이라고 생각합니다.

FWIW, 안드로이드 4.4 휴대 전화에서 나는 그들이 HTTPUrlConnection의 OkHttp 구현을 사용한다는 것을 보았습니다. >https://goo.gl/ZZRSQ5

1) 예 OkHttp 속도 등의 장점을 많이 가지고, HTTP/2, SPDY는, 저장 대역폭 -

+0

실제로 이점이 있습니다. Volley를 기본적으로 사용하는 경우 Android 4.3 이하에서는 기본적으로 TLS를 사용하도록 시행 할 수 없습니다. 사용자 정의 스택으로 OkHttp를 사용하면이를 적용 할 수 있습니다. –

8

나는 당신이이 같은 okhttp - URLConnection의 사용하지 않는 스택으로 전환하는 것이 좋습니다. ..

2) 아무런 문제가 없습니다.

3) 두 가지 모두에 하나의 com.android.volley.RequestQueue 만 있으면됩니다. 이걸보세요 ->https://goo.gl/GMn3Ls

여기 OkHttp + Volley + Gson에 대해 - https://goo.gl/nl2DfN에 대해 작성했습니다.나는 너에게 흥미로울 것 같아.

+0

고마워요! 멋진 기사. 나는 오랫동안 내 애플 리케이션에서 OkHttp + Volley를 사용해 왔으며 멋지게 작동한다. 지금 Gson 지원을 추가하고 있습니다. BTW, okhttp-urlconnection의 문제점은 무엇입니까? 이 혜택은 무엇입니까? https://goo.gl/ZZRSQ5 – User31689

+0

이 스택은 Retrofit과 잘 연계되어 있습니까? –

+0

개장은 더 많은 스택입니다. @IgorGanaposlky 님의 질문을 잘 모르겠습니다. – Sotti

관련 문제