У меня странная проблема с HttpClient на Android. Если я пытаюсь подключиться к URL-адресу https через Wi-Fi, у меня возникает задержка перед отправкой фактического запроса. Если я отправлю запрос через 3G, задержки не будет.
Тем не менее, это происходит только на Android 2.2 и 2.3. Если я запустил его, например, на 2.1-update1, он также отлично работает на Wi-Fi.
Тем не менее, при отправке запросов сразу после первоначального запроса - он работает правильно и на Wifi - но только на некоторое время. Затем возвращается 10 секунд, а потом снова ненадолго ...
При работе на 2.3:
11285 мс
и на 1.6:
617 мс
Код, который я использую, чтобы попытаться решить эту проблему, заключается в следующем
HttpManager и:
public class Main extends Activity {
Button button;
TextView text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
doRequest();
}
});
}
private void doRequest() {
HttpGet httpget = new HttpGet("https://url_goes_here/");
HttpResponse httpResponse = null;
try {
ResponseHandler<String> responseHandler = new BasicResponseHandler();
long before = System.currentTimeMillis();
httpResponse = HttpManager.execute(httpget);
long after = System.currentTimeMillis();
HttpEntity entity = httpResponse.getEntity();
String response = convertStreamToString(entity.getContent());
Log.i("Test", response);
TextView text = (TextView) findViewById(R.id.text);
text.setText((String) "Time: " + (after-before) + "\n" + response);
} catch (Exception e) {
e.printStackTrace();
// Simplified code a bit
}
}
protected static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
Строка, в которой происходит задержка: HttpManager.execute (httpget); это также строка, по которой я вычисляю мс.
Кто-нибудь когда-нибудь сталкивался с этой проблемой? Я нахожу эту задержку очень раздражающей, как и мои пользователи. Эмуляторы работают так же, как Xperia Mini Pro с 2.1-update1, где он работает должным образом по Wi-Fi, и HTC Desire с CyanogenMod 7 (2.3), где он не работает должным образом.