4 ms·
Which Android HTTP library to use
- chetanahuja 11y agoThe life of the Android dev is complicated. The number and variety of libraries available as http clients is getting bafflingly large. This post tries to put some organization around the ecosystem. Extremely useful read if you're trying to make sense of the whole mess for the first time.
- rp248 11y agoThanks for posting. Coming to Android from iOS.. I really could not make sense of which library to pick by myself as opposed to a very few obvious choices in iOS. Appreciate this very much.
- jatinmistry13 11y agocool stuff. didn't know there were these many HTTP libraries for android.
- bexp 11y agoNice writeup, would love to see more performance tests
- aavegmittal 11y agoVery nice compilation. How does these different libraries behave in terms of network performance? My use case is to download many small thumbnails and as the user scrolls up the view, I'd want to cancel the transfer for the images that has been out of view.
- bexp 11y agoI would recommend Fresco from Facebook, they had implemented cancellation logic also memory allocation done in more efficient way than other libs.
- aavegmittal 11y agoCool, thanks. Now, how are they handling "cancellation" of requests on the network (which have already been made). As far as I understand, HTTP/TCP has no option to cancel a transfer, without closing the connection itself (which would have other implications). So, once a request is made to the server, is there any option to Fresco to tell the server to stop it in some way?
- chetanahuja 11y agoYeah I think the HTTP cancellations get handled in local queue only. There's no way to "recall" an HTTP request once it has left the client except for simply closing the TCP connection. And you're right, closing the TCP connection means you have to create a new connection to do the next request and therefore I don't think any HTTP library actually does close the connection.
- bexp 11y agoFacebook using java.util.concurrent.Future<T> interface for downloading task: see here https://github.com/facebook/fresco/blob/c5e1d4cf2c081bf871f59f70cd02e4a68950ac41/imagepipeline/src/main/java/com/facebook/imagepipeline/producers/HttpUrlConnectionNetworkFetcher.java https://github.com/facebook/fresco/blob/c5e1d4cf2c081bf871f5... you can ether call future.cancel() or cancel(true): in first case download task will be finished but further processing in pipeline will be stopped. Future.cancel(true) is more aggressive and abandons download but you will get InterruptedException. As you see from source code Facebook using less aggressive approach with future.cancel(false) call.
- aavegmittal 11y agoyeah, thats what I thought. These libraries do help to some extent but I think the underlying problem of TCP still remains the same. I wonder how these libraries are handling the problem of request pipelining.
- on_and_off 11y ago> memory allocation done in more efficient way than other libs. That's one way to see it ... They are relying on a very ugly hack that makes everybody cringe, including Engineers from the Android Graphics team.
- patkennard 11y agoWhich library uses Quic?
- chetanahuja 11y agoHeh... well this compilation is all about HTTP libraries specifically. Who knows what google has in mind for QUIC for native apps.
- sunand 11y agonice post on which Http lib to use. Any suggestions on which of them to use for dealing with sockets with persistent connection ?
- DrBoyfriend 11y agoThanks for the detailed breakdown. This is very helpful.