Walkthrough
Before we get into the code, studying different techniques to improve our strategy, we want to give a general overview of networking and the possibilities the Android platform provides. So, let's think about what a client needs to do before retrieving the expected response from a server instance. When a client needs a server response, it is routed in a high-level architecture that contains many actors, such as Wi-Fi access points, LANs, proxies, servers, and DNS servers, with multiple instances of them and multiple requests to be fulfilled before getting back the desired response. Then, when the server receives the request, it needs to elaborate the response that has to be routed back to the client. The time it takes to do all of these operations needs to be reasonable for the user. Furthermore, one of the links between any two actors of the chain may be interrupted and then no response can be given back to the client. In the meantime, the user is waiting for a result...