2014-12-07 21 views

Trả lời

55

Khá nhiều khác biệt!

Sử dụng AsyncTask cho yêu cầu HTTP là một trong những điều tồi tệ nhất bạn có thể thực hiện trên Android. Đó là đầy với các vấn đề và gotchas được tránh vô điều kiện tốt nhất. Ví dụ: bạn không thể hủy yêu cầu trong khi thực thi. Các mẫu sử dụng AsyncTask cũng thường bị rò rỉ một tham chiếu đến một Activity, một tội lỗi hồng y của sự phát triển Android. async

OkHttp là lớn hơn hẳn vì nhiều lý do:

  • Nó hỗ trợ hủy bỏ bản địa. Nếu yêu cầu là trên máy bay, tham chiếu đến Callback được giải phóng và sẽ không bao giờ được gọi. Ngoài ra, nếu yêu cầu chưa bắt đầu, nó sẽ không bao giờ được thực thi. Nếu bạn đang sử dụng HTTP/2 hoặc SPDY, chúng tôi thực sự có thể hủy băng thông và sức mạnh tiết kiệm giữa yêu cầu.
  • Tính năng này hỗ trợ gắn thẻ nhiều yêu cầu và hủy tất cả yêu cầu bằng một cuộc gọi phương thức duy nhất. Điều này có nghĩa là mọi yêu cầu bạn thực hiện, ví dụ: Activity có thể được gắn thẻ với phiên bản Activity. Sau đó, trong hoặc onStop bạn có thể hủy tất cả các yêu cầu được gắn thẻ với phiên bản Activity.
  • Nếu bạn đang sử dụng các yêu cầu và phản hồi HTTP/2 hoặc SPDY được ghép nối qua một kết nối với máy chủ từ xa và bằng cách sử dụng cơ chế Call không đồng bộ, điều này hiệu quả hơn nhiều so với phiên bản chặn.

Vì vậy, nếu bạn có thể, hãy sử dụng Call.enqueue!

1

Không có gì nhiều. OKHttp async là OKHttp API điều khiển. Vì vậy, miễn là bạn bó các lọ với nhau cho tất cả các nền tảng, bạn nên được tốt. AsyncTask là cách làm việc của Android.

Tuy nhiên, vì nhiệm vụ Async Honeycomb chạy các tác vụ tuần tự và không song song. Điều này có nghĩa rằng mặc dù phương thức thực hiện của AsyncTask kéo dài một luồng mới chạy công việc của bạn khỏi luồng giao diện người dùng nhưng tất cả các tác vụ được gửi đến một AsyncTask chạy trong cùng một luồng được mở rộng.

Vì vậy, đối với 3 tác vụ được gửi, bạn không nhận được 3 luồng mà tất cả chúng đều chạy tuần tự trên một chuỗi được kéo dài. Với OKHttp, bạn có thể đạt được tính song song thực sự bằng cách sử dụng callbacks và async GET và POST.

Mặc dù bạn cũng có thể thực hiện song song đúng trong các phương thức AsyncTask (kiểm tra các phương thức thực thi quá tải trong AsyncTask) nhưng hành vi Android mặc định không làm như vậy.

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