2015-01-15 27 views
10

Tôi đang sử dụng thư viện Volley trong ứng dụng Android của mình. Nó hoạt động tốt, nhưng tôi thấy rằng OkHttp cũng cung cấp một số cải tiến hơn nữa. Tôi đã tích hợp OkHttp với Volley sử dụng:Tôi có nên sử dụng thư viện OkHttp với Volley không?

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

lớp OkHttpStack của tôi là:

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) Có giá trị nó? Tôi đã không nhận thấy bất kỳ cải tiến đáng chú ý nào, nhưng đó có thể là do tôi vẫn chưa triển khai hỗ trợ SPDY trên máy chủ của mình.

2) Về việc tăng cường bởi OkHttp là phản hồi bộ nhớ đệm. Tuy nhiên, cú volley cũng vậy. Tôi có bất kỳ vấn đề nào tương tự như thế này không: https://github.com/square/okhttp/issues/680

3) Ngoài ra, tôi đang sử dụng hai RequestQueues trong Volley - một cho Hình ảnh & khác cho JSON. Tôi có nên sử dụng OkHttp với cả hai hàng đợi không?

Trả lời

3

Tôi không biết.

Nhưng tôi ở một vị trí tương tự và tôi đang đi xuống bên cạnh "không, không phải bây giờ". Mặc dù tôi có một số ý tưởng, tôi sẽ giải thích:

Tôi chưa tìm thấy bất kỳ lợi ích thực sự nào khi sử dụng OkHttp bên dưới Volley để tôi sử dụng. (Các máy chủ HTTPS mà tôi kết nối không hỗ trợ SPDY và ​​tôi biết mình đã nhận được kết nối tổng hợp và tôi cũng tin rằng mã hóa gzip và tôi biết Volley có bộ nhớ đệm hoạt động trong đó.) các ứng dụng mà chỉ có thể làm tổn thương hiệu suất, tôi tin.

Những gì OkHttp có, mà Volley có thể được thay đổi để sử dụng, là kết nối thực sự hủy bỏ. Đây là những gì tôi quan tâm nhất, bởi vì ứng dụng của tôi thực hiện rất nhiều yêu cầu và cũng hủy nhiều yêu cầu. Ngay bây giờ Volley không thực sự ngăn chặn một yêu cầu đã làm cho nó tất cả các cách để mở một kết nối (hoặc thereabouts), nó chỉ đánh dấu nó bị hủy bỏ và ném đi phản ứng của máy chủ.

Điều này là tốt cho ngữ nghĩa, nhưng có tác động nghiêm trọng về hiệu suất trong trường hợp của tôi. Cụ thể, nếu tôi thực hiện một loạt các yêu cầu đến một máy chủ sắp chết, và những yêu cầu đó sẽ hết thời gian, sẽ mất một vài thứ như khoảng 30 giây để tính thời gian, trong thời gian đó các yêu cầu xếp hàng khác không thể sử dụng kết nối mạng vì nhóm đang bận chờ đợi thời gian kết nối. Vì vậy, những gì tôi nghĩ là nó sẽ là tuyệt vời để viết một "OkHttpStack" và plumb sự kiện #cancel() xuống OkHttp và thực sự hủy bỏ kết nối, đó sẽ là một chiến thắng lớn cho tôi.

FWIW, trên điện thoại Android 4.4 Tôi đã xem xét tất cả họ đều sử dụng triển khai OkHttp của HTTPUrlConnection và bạn nhận được điều đó 'miễn phí' trong tương lai.

+0

Thực tế có một lợi ích. Nếu bạn sử dụng Volley theo mặc định, bạn không thể thực thi nó để sử dụng TLS theo mặc định trên Android 4.3 trở xuống. Nếu bạn sử dụng OkHttp làm ngăn xếp tùy chỉnh, bạn có thể thực thi nó. –

8

tôi khuyên bạn nên chuyển sang một ngăn xếp mà không sử dụng okhttp-URLConnection như thế này ->https://goo.gl/ZZRSQ5

1) Có OkHttp có rất nhiều ưu điểm như tốc độ, HTTP/2, SPDY, tiết kiệm băng thông. ..

2) Tôi chưa gặp phải bất kỳ sự cố nào.

3) Bạn chỉ cần một com.android.volley.RequestQueue cho cả hai. Hãy xem điều này ->https://goo.gl/GMn3Ls

Tôi đã viết về OkHttp + Volley + Gson tại đây ->https://goo.gl/nl2DfN.Tôi nghĩ rằng có thể là thú vị cho bạn.

+0

Cảm ơn! Bài viết hay. Tôi đã sử dụng OkHttp + Volley trong ứng dụng của tôi một thời gian và nó hoạt động độc đáo. Tôi đang thêm hỗ trợ Gson cho nó ngay bây giờ. BTW, vấn đề với okhttp-urlconnection là gì? Lợi ích của việc này là gì: https://goo.gl/ZZRSQ5 – User31689

+0

Ngăn xếp này có gắn chặt với Retrofit không? –

+0

Trang bị thêm là ngăn xếp DIFERENT. Tôi không chắc tôi có câu hỏi của bạn @IgorGanaposlky. – Sotti

Các vấn đề liên quan