Android 네트워킹 라이브러리 비교 : OkHTTP, Retrofit 및 Volley [닫기]


579

iOS를 배우는 iOS 개발자의 두 부분으로 구성된 질문은 JSON에서 이미지, 오디오 및 비디오의 스트리밍 다운로드에 이르기까지 다양한 요청을하는 Android 프로젝트에서 작업합니다.

  1. iOS에서는 AFNetworking 프로젝트를 광범위하게 사용 했습니다. Android에 해당하는 라이브러리가 있습니까?

  2. Volley 뿐만 아니라 OkHTTPRetrofit by Retrofit대해 읽었 지만 아직 개발 경험이 없습니다. 누군가가 각각의 최상의 사용 사례에 대한 구체적인 예를 제공 할 수 있기를 바랍니다. 내가 읽은 것에서 OkHTTP가 세 가지 중 가장 강력 해 보이며이 프로젝트의 요구 사항을 처리 할 수 ​​있습니다 (위에서 언급).


3
HttpUrlConnection의 내부 구현을 사용하는 경우 HttpUrlConnection은 POST 요청에서 자동 재 시도를 사용한다는 점을 고려해야합니다. 그로 인해 많은 피해가 발생했습니다. 자세한 내용은 여기를 참조하십시오 : stackoverflow.com/a/37675253/2061089
oli

1
모든 사람이 모든 네트워킹 라이브러리의 목록을 필요로하는 경우 내 블로그 게시물 androidredman.wordpress.com/2017/06/26/…
Manohar Reddy

발리는 레거시 Apache, HttpUrlConnection, Apache-4 또는 OkHttp를 실행할 수 있습니다. Retrofit은 실제로 OkHttp 만 실행하는 곳입니다. 개조는 구성하기가 훨씬 쉽습니다.
bitsabhi

답변:


647

누군가가 각각의 최상의 사용 사례에 대한 구체적인 예를 제공 할 수 있기를 바랍니다.

웹 서비스와 통신하는 경우 Retrofit을 사용하십시오. 이미지를 다운로드하는 경우 피어 라이브러리 Picasso를 사용하십시오. Retrofit / Picasso 외부에있는 HTTP 작업을 수행해야하는 경우 OkHTTP를 사용하십시오.

발리는 대략 Retrofit + Picasso와 경쟁합니다. 장점은 하나의 라이브러리입니다. 마이너스 측면에서, 그것은 문서화되지 않은 하나이며 , 지원되지 않는 "벽에 코드를 던져서 그 위에 I | O 프리젠 테이션을한다"라이브러리입니다.

수정-발리는 이제 공식적으로 Google에서 지원합니다. 친절하게 구글 개발자 가이드를 참조하십시오

내가 읽은 것에서 OkHTTP는 3 중 가장 강력합니다.

개조는 가능하면 OkHTTP를 자동으로 사용합니다. Jake Wharton의 Volist와 OkHTTP를 연결 하는 요지 가 있습니다 .

이 프로젝트의 요구 사항을 처리 할 수 ​​있습니다 (위에서 언급).

아마도 "스트리밍"의 일반적인 정의에 따라 "오디오 및 비디오의 스트리밍 다운로드"에 이들 중 어느 것도 사용하지 않을 것입니다. 대신 Android의 미디어 프레임 워크가 해당 HTTP 요청을 처리합니다.

즉, 자체 HTTP 기반 스트리밍을 시도하려는 경우 OkHTTP는 해당 시나리오를 처리해야합니다. 발리가 그 시나리오를 얼마나 잘 처리했는지는 기억 나지 않습니다. Retrofit이나 Picasso는 그러한 용도로 설계되지 않았습니다.


4
간결한 답변에 대한 @CommonsWare와 문서화되지 않은 Volley의 메모에 대한 참고 사항에 감사드립니다 (다른 프로젝트와 비교할 때 특히 인상적입니다). 내가 땅에서 물건을 얻을 수 있도록 확실히 도와줍니다.
Alfie Hanssen 2016 년

18
@CommonsWare의 또 다른 위대한 답변. 누군가 RoboSpice가이 모든 것에 어떻게 적용되는지 추적 할 수 있습니까?
user1923613

3
@ user1923613 github.com/octo-online/robospice 네트워크 통화에 발리를 사용하는 경우 robospice를 사용할 필요가 없습니다! Spring Android 또는 Google Http Client 또는 Retrofit). 강력한 네트워크 클라이언트로 빠른 네트워킹 및 이미지 로딩을 원한다면 발리로 갈 수 있습니다! 그러나 Robospice를 사용하는 일반적인 안드로이드 비동기 작업을 대체하여 성능을 향상시키고 메모리 누수를 피할 수 있습니다!
LOG_TAG

4
@frostymarvelous : 나는 문서화되지 않고 지원되지 않는 것이 충분한 정당화 이상이라고 생각합니다. Google에 이와 같은 것을보다 공식적으로 처리 할 수있는 시스템이없는 것은 아닙니다 (예 : Android 지원 라이브러리). 이 답변 이후 2 년 동안 플러스 측면에서 비공식적으로 코드를 인공물로 포장하는 것을 포함하여 약간의 커뮤니티 지원이 있습니다.
CommonsWare

4
@AbhinavVutukuri : 2 년 전의 답변에 대해 언급하고 있습니다. 당시에는 문서가 없었습니다.
CommonsWare

361

발리 관점을 보면 다음과 같은 요구 사항이 있습니다.

발리는 개별적인 작은 HTTP 요청을 처리하는 데 전적으로 집중합니다. 따라서 HTTP 요청 처리에 약간의 문제가 있다면 Volley는 아마도 당신에게 갈고리가 있습니다. 반면에 이미지 처리에 문제가있는 경우 유일한 유일한 후크는 ImageCache 입니다. "아무것도 아니지만, 많이 아니에요!". 그러나 요청을 정의하면 조각이나 활동 내에서 요청을 사용하는 것이 병렬 AsyncTasks와 달리 고통스럽지 않습니다.

발리의 장단점 :

발리의 장점은 무엇입니까?

  • 네트워킹 부분은 이미지만을위한 것이 아닙니다. 발리는 백엔드에서 없어서는 안될 부분입니다. 간단한 REST 서비스를 기반으로 한 새로운 프로젝트의 경우 큰 승리가 될 수 있습니다.

  • NetworkImageView는 Picasso보다 요청 정리에 더 적극적이며 GC 사용 패턴에서 더 보수적입니다. NetworkImageView는 강력한 메모리 참조에 전적으로 의존하며 ImageView에 대한 새 요청이 이루어 지거나 ImageView가 화면 밖으로 이동하는 즉시 모든 요청 데이터를 정리합니다.

  • 공연. 이 글은이 주장을 평가하지는 않지만, 메모리 사용 패턴에서 신중하게주의를 기울였습니다. Volley는 또한 컨텍스트 전환을 줄이기 위해 메인 스레드에 콜백을 배치하려고합니다.

  • 발리에는 분명히 미래도 있습니다. 관심이 있으시면 RequestFuture를 확인하십시오.

  • 고해상도 압축 이미지를 다루는 경우 Volley가 유일하게 효과적인 솔루션입니다.

  • 발리는 Okhttp와 함께 사용할 수 있습니다 (Okhttp의 새로운 버전은 더 나은 성능을 위해 NIO를 지원합니다)

  • 발리는 활동 라이프 사이클과 잘 어울립니다.

발리 문제 :
발리는 새로운 것이기 때문에 아직 지원되지 않는 것은 거의 없지만 수정되었습니다.

  1. 멀티 파트 요청 (솔루션 : https://github.com/vinaysshenoy/enhanced-volley )

  2. 상태 코드 201은 오류로 간주되며, 상태 코드 200-207은 이제 성공적으로 응답합니다 (고정 : https://github.com/Vinayrraj/CustomVolley )

    업데이트 : Google 발리 최신 릴리스에서 2XX 상태 코드 버그가 수정 되었습니다! Ficus Kirkpatrick에게 감사합니다!

  3. 덜 문서화되었지만 많은 사람들이 github에서 발리를 지원하고 있습니다 .java와 같은 문서는 여기 에서 찾을 수 있습니다 . 안드로이드 개발자 웹 사이트에서 Volley를 사용하여 네트워크 데이터 전송을 위한 가이드를 찾을 수 있습니다 . 발리 소스 코드는 Google Git 에서 찾을 수 있습니다.

  4. Volley Framework 의 리디렉션 정책 을 해결 / 변경하려면 Volley를 OkHTTP와 함께 사용 하십시오 (위에서 언급 한 CommonsWare)

또한 Picasso를 사용 하여이 비교 발리의 이미지 로딩을 읽을 수 있습니다

개조 :

Square 에 의해 출시되었으며 , REST API를 사용하기 매우 쉽습니다 (NIO 지원으로 업데이트! Voila!).

개조의 장점 :

  • Volfit에 비해 Retrofit의 REST API 코드는 간단하고 뛰어난 API 문서를 제공하며 커뮤니티에서 훌륭한 지원을 제공합니다! 프로젝트에 추가하는 것은 매우 쉽습니다.

  • 오류 처리와 함께 모든 직렬화 라이브러리에서 사용할 수 있습니다.

업데이트 : -Retrofit 2.0.0-beta2에는 많은 변화가 있습니다.

  • OkHttp 2.0이 포함 된 Retrofit 버전 1.6은 이제 Okio 에 의존하여 java.iojava.nio 를 지원 하므로 ByteStringBuffer 를 사용하여 데이터를보다 쉽게 ​​액세스, 저장 및 처리하여 CPU와 메모리를 절약하는 영리한 작업을 수행 할 수 있습니다. (FYI : 이것은 NIO를 지원 하는 Koush의 OIN 라이브러리를 생각 나게합니다 !) 우리는 Retrofit을 RxJava와 함께 사용하여 rxObservables 를 사용하여 REST 호출을 결합하고 연결하여 추악한 콜백 체인 을 피할 수 있습니다 (콜백 지옥을 피하기 위해 !!) .

버전 1.6에 대한 Retrofit의 단점 :

  • 메모리 관련 오류 처리 기능이 좋지 않습니다 (이전 버전 Retrofit / OkHttp의 경우). Java NIO를 지원하는 Okio로 개선되었는지 확실하지 않습니다.

  • 우리가 부적절한 방식으로 이것을 사용하면 최소한의 스레딩 지원이 지옥을 불러 일으킬 수 있습니다.

(위의 모든 단점은 Retrofit 2.0 베타의 새로운 버전에서 해결되었습니다)

===================================================== ======================

최신 정보:

Android Async vs Volley vs Retrofit 성능 벤치 마크 (밀리 초, 값이 낮을수록 좋음) :

Android Async vs Volley vs Retrofit 성능 벤치 마크

(OKhttp의 새로운 버전은 NIO Okio 라이브러리에 의존하기 때문에 Retrofit Benchmarks 정보 위의 FYI는 java NIO 지원으로 향상됩니다)

다양한 반복 (1 – 25 회)을 사용한 세 가지 테스트 모두에서 발리는 50 % ~ 75 % 더 빨랐습니다. 개조는 AsyncTasks보다 50 % ~ 90 % 빠른 속도로 클럭킹하여 같은 횟수로 같은 엔드 포인트에 도달했습니다. 대시 보드 테스트 스위트에서는 데이터를 몇 초 더 빠르게로드 / 파싱했습니다. 그것은 실제와의 큰 차이입니다. 테스트를 공정하게하기 위해 AsyncTasks / Volley의 시간에는 Retrofit이 자동으로 수행하는 것처럼 JSON 구문 분석이 포함되었습니다.

RetroFit 벤치 마크 테스트에서 승리합니다!

결국 우리는 응용 프로그램을 위해 Retrofit과 함께하기로 결정했습니다. 엄청나게 빠를뿐만 아니라 기존 아키텍처와 매우 잘 맞습니다. API를 거의 또는 전혀 노력하지 않고 오류 처리, 캐싱 및 페이지 매김을 자동으로 수행하는 부모 콜백 인터페이스를 만들 수있었습니다. Retrofit을 병합하기 위해 변수 이름을 바꿔서 GSON 호환 모델을 만들고 간단한 인터페이스 몇 개를 작성하고 이전 API에서 함수를 삭제하고 AsyncTasks를 사용하지 않도록 조각을 수정해야했습니다. 이제 몇 개의 조각이 완전히 변환되었으므로 고통스럽지 않습니다. 우리가 극복해야 할 고통과 문제가 조금 있었지만 전반적으로 순조롭게 진행되었습니다. 처음에는 몇 가지 기술적 문제 / 버그가 발생했지만 Square에는 환상적인 Google+ 커뮤니티가있어이를 해결할 수있었습니다.

발리를 언제 사용해야합니까?!

우리는 REST API를 소비 할뿐만 아니라 이미지를로드해야 할 때 발리를 사용할 수 있습니다! 네트워크 요청 큐잉 시스템은 많은 n / w 요청에 동시에 필요합니다! Volley는 Retrofit보다 메모리 관련 오류 처리 기능이 우수합니다!

OkHttp 는 Volley와 함께 사용할 수 있으며 Retrofit은 기본적으로 OkHttp 를 사용합니다 ! 그것은이 SPDY 지원, 연결 풀링, 디스크 캐싱, 투명 압축을! 최근 Okio 라이브러리를 사용 하여 java NIO를 약간 지원 합니다.

출처, 크레딧 : Mr. Josh Ruesch의 volley-vs-retrofit

참고 : 스트리밍 정보는 RTSP / RTCP와 같은 스트리밍 유형에 따라 다릅니다.


정보는 @ Jan1337z +1! 업데이트했습니다! android.googlesource.com/platform/frameworks/volley
LOG_TAG

4
@LOG_TAG 샘플에서 RoboSpice를 벤치마킹하는 것이 흥미로울 것입니다. 우리는 Retrofit 모듈을 제공하기 때문에 약간의 변경이 필요하다고 생각합니다. 소스가 어딘가에 있습니까? RS의 장점은 네트워크 요청을 수행하는 활동의 수명주기를 올바르게 처리하고 투명 캐싱을 제공한다는 것입니다. 순수한 개조 요청에 비해 오버 헤드가 작을 것입니다.
Snicolas

@Snicolas Josh Ruesch 블로그 에서이 벤치 마크 결과를 얻었습니다. Ficus Kirkpatrick (Volley 설립자), Josh Ruesch 사이의 전환을 확인할 수 있습니다! 그는 아직 벤치 마크 테스트 프로젝트를 공유하지 않았습니다! 참고로 나는 이 알림 문제에 직면 한 개조 샘플로 RoboSpice 배우기 시작했습니다. :)
LOG_TAG

3
안녕! Volley의 멀티 파트 요청 MultipartEntityBuilder에 대해서는 httpmime라이브러리 에서 사용할 수 있다고 생각 합니다.
BNK

2
다른 사람이이 벤치 마크를 확인 했습니까? 아파치 http 라이브러리는 M에서 더 이상 사용되지 않으며 (멀티 파트 빌더로 사용하고 있음) 네트워킹 코드를 Retrofit으로 마이그레이션하기로 결정했습니다. 처음에는 서버에서 많은 객체를 얻기 위해 GET 호출 중 하나를 변경했습니다. Retrofit vs AsyncTask의 시간을 정했습니다 (내 JSON 구문 분석 사용). 성능은 테이블의 "One Discussion"열에 표시된 것처럼 3 배 향상되지 않은 매우 근접했습니다. 물론 결과 코드는 훨씬 깨끗하고 내 JSON 파서를 작성할 필요는 없지만 단일 GET 요청의 경우 개선이 없었습니다.
Gary Kipnis

44

RoboSpice Vs. 발리

에서 https://groups.google.com/forum/#!topic/robospice/QwVCfY_glOQ

  • RoboSpice (RS)는 Volley보다 서비스 기반이며 Android 철학을 더 존중합니다. 발리는 스레드 기반이며 백그라운드 처리가 Android에서 수행되는 방식이 아닙니다. 궁극적으로 두 라이브러리를 모두 파고 그것들이 상당히 비슷하다는 것을 알 수 있지만 백그라운드 처리를 수행하는 방법은 안드로이드 지향적입니다. 예를 들어 RS가 실제로 백그라운드에서 무언가를하고 있음을 사용자에게 알릴 수 있습니다. 발리를 위해 열심히 (실제로 전혀하지 않습니다).
  • RoboSpice와 발리는 우선 순위 지정, 재시도 정책, 요청 취소와 같은 멋진 기능을 제공합니다. 그러나 RS는 캐시 관리, 요청 집계, 보류중인 요청에 다시 연결하는 것, 서버 헤더에 의존하지 않고 캐시 만료 처리 등의 더 많은 기능을 갖춘 고급 캐싱을 제공합니다.
  • RoboSpice는 UI 스레드 외부에서 더 많은 작업을 수행합니다. 발리는 POJO를 기본 스레드에서 직렬화 해제합니다. RS를 사용하면 앱의 응답 성이 향상됩니다.
  • 속도면에서 우리는 반드시 통계가 필요합니다. RS는 지금 초고속을 얻었지만 여전히 여기에 넣을 그림이 없습니다. 발리는 이론적으로 조금 더 빨라야하지만 RS는 이제 거의 평행을 이룬다.
  • RoboSpice는 확장 기능과 함께 광범위한 호환성 범위를 제공합니다. okhttp, retrofit, ormlite (beta), jackson, jackson2, gson, xml serializer, Google http client, spring android ...와 함께 사용할 수 있습니다. 발리는 ok http와 함께 사용할 수 있으며 gson을 사용합니다. 그게 다야.
  • 발리는 RS보다 더 많은 UI 설탕을 제공합니다. Volley는 NetworkImageView를 제공하고 RS는 향신료 목록 어댑터를 제공합니다. 기능면에서 아직까지는 아니지만 Volley 가이 주제에 대해 더 진보되어 있다고 생각합니다.
  • RoboSpice는 최초 릴리스 이후 200 개 이상의 버그가 해결되었습니다. 상당히 견고하고 생산에 많이 사용됩니다. 발리는 덜 성숙하지만 사용자층이 빠르게 성장하고 있습니다 (Google 효과).
  • RoboSpice는 Maven Central에서 사용할 수 있습니다. 발리는 찾기가 어렵습니다.)

Robospice는 REST 호출에 Android 서비스를 사용합니다. Robospice와 함께 Volley (tread based)를 사용할 수있는 것과 같은 방식으로 Robospice를 Retrofit과 함께 사용하여 gson 구문 분석 노력을 최소화 할 수 있습니까? (qsn에게 물어 보는 것이 맞는지 잘 모르겠습니다) 서비스로 발리를 검색하고 있습니다!
LOG_TAG

1
서비스가있는 발리는 기본적으로 RS입니다. 또는 연대순으로 말하면 Volley는 서비스가없는 RS이며 다른 기능은 거의 없습니다. 또한 RS와 함께 Retrofit을 사용할 수 있으며 원하는 경우 okhttp를 추가 할 수도 있습니다.
Snicolas

7
발리는 왜 찾기가 어려운가요? compile 'com.mcxiaoke.volley:library:1.0.+'
Rob

1
@Rob mcxiaoke의 클론을 사용할 수 없었던 시간이있었습니다. 앱에 발리를 수동으로 포함시켜야했습니다.
frostymarvelous

"발리는 주 스레드에서 POJO를 역 직렬화합니다". 리턴 된 JSON 데이터를 수신하고 이것이 문제인 경우 별도의 스레드에서 직접 직렬화 해제 할 수 있습니다.
AndroidDev September

20

Android 용 AF 네트워킹 :

빠른 안드로이드 네트워킹여기에 있습니다

빠른 Android 네트워킹 라이브러리는 GET, POST, DELETE, HEAD, PUT, PATCH와 같은 모든 유형의 HTTP / HTTPS 요청을 지원합니다

빠른 Android 네트워킹 라이브러리는 모든 유형의 파일 다운로드를 지원합니다

빠른 Android 네트워킹 라이브러리는 모든 유형의 파일 업로드를 지원합니다 (멀티 파트 업로드 지원)

빠른 Android 네트워킹 라이브러리는 요청 취소 지원

빠른 Android 네트워킹 라이브러리는 모든 요청 (LOW, MEDIUM, HIGH, IMMEDIATE)에 대한 우선 순위 설정을 지원합니다.

RxJava를 지원하는 빠른 Android 네트워킹 라이브러리

OkHttp를 네트워킹 계층으로 사용하므로 다음을 지원합니다.

빠른 Android 네트워킹 라이브러리는 HTTP / 2 지원을 지원하므로 동일한 호스트에 대한 모든 요청이 소켓을 공유 할 수 있습니다

빠른 Android 네트워킹 라이브러리는 연결 풀링을 사용하여 요청 대기 시간을 줄입니다 (HTTP / 2를 사용할 수없는 경우).

투명한 GZIP로 다운로드 크기 축소

빠른 Android 네트워킹 라이브러리는 응답 캐싱을 지원하여 반복 요청에 대해 네트워크를 완전히 피합니다.

고마워 : 도서관은 나에 의해 만들어졌다


1
라이브러리가 HTTP / 2를 지원하지만 HTTP / 2 지원을위한 API 요구 사항이 있는지는 언급하지 않습니다. 5.0 미만의 Android API 레벨에는 HTTP / 2를 지원하는 올바른 SSL 암호화 방법이 없었습니다. 노크하지 말고 제안 된 솔루션을 완전히 평가하십시오.
DoctorD September

@ AmitShekhar : 방금 안드로이드에서 API 호출에 가장 적합한 것을 알고 싶었습니다. Android 네트워킹 라이브러리를 사용하고 있는데 Retrofit, Volley 또는 Android Networking을 구현하기에 좋은 것은 무엇입니까?
Parth Bhayani

@Amit Shekhar 멀티 파트 이미지 업로드를위한 Fast Android Networking의 효율성, 특히 인터넷이 부족한 시나리오의 경우?
user3135923 2016 년

18

비동기 HTTP 클라이언트 loopj와 Volley

내 프로젝트의 세부 사항은 1-5 분마다 작은 HTTP REST 요청입니다.

비동기 HTTP 클라이언트 (1.4.1)를 오랫동안 사용하고 있습니다. 성능은 바닐라 Apache httpClient 또는 HTTP URL 연결을 사용하는 것보다 낫습니다. 어쨌든, 새로운 버전의 라이브러리가 작동하지 않습니다 : 라이브러리 간 예외 컷 콜백 체인.

모든 답을 읽으면 새로운 것을 시도하게되었습니다. Volley HTTP 라이브러리를 선택했습니다.

테스트 없이도 일정 시간 동안 사용한 후에는 응답 시간이 1.5 배, 2 배로 감소한 것을 알 수 있습니다.

아마도 Retrofit이 비동기 HTTP 클라이언트보다 낫습니까? 나는 그것을 시도해야합니다. 그러나 나는 발리가 나를위한 것이 아니라고 확신한다.


Retrofit Vs AsyncHttpClient에 대한 모든 분석 ??? 그렇다면 게시하십시오 @Sergey
IshRoid


몇 년 동안 AsyncHttpClient를 사용하고 있습니다. 나쁜 부분은 github 저장소가 커밋없이 2 년이라는 것입니다.
Vitor Hugo Schwaab

그것은 더 이상 실제가 아니며 비동기 http는 너무 오래된 방식입니다. 다른 라이브러리로 변경하십시오. 발리도 아주 좋은 선택이되었습니다.
Sergey Vakulenko

세르게이는 아직도 열심히 응답을 기다리는 .. 내가 RxJava 개조 또는 else..Please이 알려 어떤 일처럼 뭔가를 사용해야합니다 내가 AsyncHttpClient을 사용하고 당신의 질문의 대답을 찾고 @IshRoid
깊은 데이브

11

Volley를 사용한 경험에서 얻은 토론에 약간의 내용을 추가하기 만하면됩니다.

  1. 발리는 어떤 식 으로든 스트리밍 업로드 또는 다운로드를 처리하지 않습니다. 즉, 전체 요청 본문이 메모리에 OutputStream있어야하며 기본 소켓처럼 요청 본문을 기본 소켓에 쓰는 데 또는를 사용 InputStream하여 응답 본문을 읽을 수 없습니다 HttpURLConnection. 따라서 Volley는 대용량 파일을 업로드하거나 다운로드하기에 적합하지 않습니다. 귀하의 요청과 응답은 작아야합니다. 이것은 제가 개인적으로 겪은 발리의 가장 큰 한계 중 하나입니다. 가치가있는 것을 위해 OkHttp에는 스트림 작업을위한 인터페이스가 있습니다.

  2. 공식 문서의 부족은 성가신 일이지만, 소스 코드를 읽음으로써 해결할 수 있었지만 따라하기가 쉽지 않습니다. 더 귀찮은 것은 발리가 공식 릴리스 버전과 Maven 또는 Gradle 아티팩트를 가지고 있지 않기 때문에 종속성으로 관리하는 것이 스퀘어가 출시 한 라이브러리보다 두통이 더 많다는 것입니다 . 리포지토리를 복제하고 항아리를 만들면 나름대로입니다. 버그 수정을 찾고 있습니까? 가져 와서 거기에 있기를 바랍니다. 다른 것들도 얻을 수 있습니다. 문서화되지 않습니다. 제 생각에 이것은 코드베이스가 합리적으로 활성화되어 있지만 Volley가 지원되지 않는 타사 라이브러리라는 것을 의미합니다. 주의 사항

  3. 기본적으로 Content-Type을 클래스 / 요청 유형 (JsonObjectRequest, ImageRequest 등)에 묶는 것은 다소 까다 롭고 Volley의 기존 요청 유형 계층 구조에 묶여 있기 때문에 호출 코드의 유연성이 약간 떨어집니다. 나는 Content-Type을 다른 헤더처럼 헤더로 설정하는 것이 간단합니다 (Volley에서는 그렇게하지 마십시오. 두 개의 Content-Type 헤더로 끝날 것입니다!). 그것은 내 개인적인 의견 일뿐이며 해결할 수 있습니다.

발리가 유용한 기능을 가지고 있지 않다는 것은 아닙니다. 확실히 그렇습니다. 쉽게 사용자 지정할 수있는 재시도 정책, 투명 캐싱, 취소 API 및 요청 스케줄링 및 동시 연결 지원은 훌륭한 기능입니다. 모든 HTTP 사용 사례 (위의 항목 1 참조)를위한 것은 아니며 Volley를 앱에서 프로덕션 용도로 사용하는 데 어려움이 있음을 아십시오 (항목 2).


전체 메모리 로딩은 내가 천천히 죽이는 것입니다. 다른 사람이 그것을 언급 한 신에게 감사하십시오.
TheSunny

라이브러리는 요청 본문의 방어 복사본을 만들 수도 있으므로 큰 요청의 메모리 소비는 예상보다 두 배가 될 수 있습니다.
Jeff

9

나는 최근 에 테이블에 약간의 여분을 가져 오는 ion 이라는 lib를 발견했습니다 .

ion은 ImageView, JSON (GSON의 도움으로), 파일 및 매우 편리한 UI 스레딩 지원과 통합 된 이미지 다운로드를 기본적으로 지원합니다.

나는 그것을 새로운 프로젝트에서 사용하고 있으며 지금까지 결과는 좋았습니다. 사용은 Volley 또는 Retrofit보다 훨씬 간단합니다.


2
이온 대 개조, 어느 것을 추천 하시겠습니까?
Sreekanth Karumanaghat

개조가 이온보다 낫다
Rajesh Koshti

4

허용 된 답변과 LOG_TAG가 말한 내용에 추가 .... Volley가 백그라운드 스레드에서 데이터를 구문 분석 Request<YourClassName>하려면 onResponse메소드가 기본 스레드에서 호출되고 기본 스레드에서 구문 분석하면 응답이 있으면 UI가 지연 될 수 있으므로 서브 클래스 화해야합니다 크다. 어떻게하는지 여기 를 읽으 십시오 .


1
맞습니다 ... 발리는 응답이 실제로 클 때 ui가 지연되도록하는 메인 스레드의 응답을 구문 분석합니다.
Gopal Singh Sirvi 2016 년

3

개조 1.9.0 vs. RoboSpice

내 앱에서 둘 다 사용하고 있습니다.

중첩 된 JSON 클래스를 구문 분석 할 때마다 Robospice가 Retrofit보다 빠르게 작동합니다. Spice Manger가 당신을 위해 모든 것을 해줄 것이기 때문입니다. Retrofit에서는 GsonConverter를 생성하고 역 직렬화해야합니다.

같은 활동에서 두 개의 조각을 만들고 같은 종류의 두 URL로 같은 시간을 호출했습니다.

09-23 20:12:32.830  16002-16002/com.urbanpro.seeker E/RETROFIT   RestAdapter Init
09-23 20:12:32.833  16002-16002/com.urbanpro.seeker E/RETROFIT calling the method
09-23 20:12:32.837  16002-16002/com.urbanpro.seeker E/ROBOSPICE initialzig spice manager
09-23 20:12:32.860  16002-16002/com.urbanpro.seeker E/ROBOSPICE Executing the method
09-23 20:12:33.537  16002-16002/com.urbanpro.seeker E/ROBOSPICE on SUcceess
09-23 20:12:33.553  16002-16002/com.urbanpro.seeker E/ROBOSPICE gettting the all contents
09-23 20:12:33.601  16002-21819/com.urbanpro.seeker E/RETROFIT deseriazation starts
09-23 20:12:33.603  16002-21819/com.urbanpro.seeker E/RETROFIT deseriazation ends

2

그리고 또 다른 옵션 : https://github.com/apptik/jus

  • Volley와 같은 모듈 식이지만 다양한 HTTP 스택 및 변환기를 즉시 지원하여 더 확장되고 문서화가 향상됩니다.
  • Retrofit과 같은 서버 API 인터페이스 매핑을 생성하는 모듈이 있습니다.
  • 또한 JavaRx를 지원합니다

마커, 변압기 등과 같은 다른 많은 편리한 기능들

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.