I\'m using HttpURLConnection on Android KitKat to POST some data to a server. The server takes a long time to respond, and the connection is silently retry
Implement a hard timeout yourself, and force close the HttpURLConnection by calling disconnect. This can be done from your Activity using android handler; If you use AsyncTask, you can simply call cancel or Thread.interrupt():
new Handler().postDelayed(new Runnable() {
public void run() {
httpUrlConnTask.cancel(true);
}
}, timeout * 1000);
And in your httpUrlConnTask, call disconnect:
if (isCancelled()) {
urlConnection.disconnect();
return;
}
You may have to do urlConnection in another internal child thread so you can do a while loop in asynctask monitoring for isCancelled. And a try..catch so you can close all the streams properly.
you already have keepAlive false, and readTimeout, consider adding connection timeout too. This will set the socket timeout.