Cool, 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?
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.
Yeah 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.
yeah, 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.