Assume we have a Socket that is connected to a server. Usually, we will use a secondary thread to read from the socket in a blocking connection.
If the user want to terminate the connection, in Java, we can call socket.close(). But not in Android (well, we can, but it will do nothing). While the thread is still alive and waiting, close() will not be executed and the connection will remain active. So, what can be done?
One way is to terminate the thread. This is obviously not a very good way, and denied the thread from executing its final code correctly.
The second and the right one, is simply to call Socket.shutdownInput() method. This will create a disconnection for the waiting thread, the thread will die according to plan and your application will run just fine!