【发布时间】:2024-01-17 14:03:01
【问题描述】:
我在 Android 上遇到了 HttpClient 这个奇怪的问题。如果我尝试使用 WiFi 连接到 https url,则在发送实际请求之前会有延迟。如果我通过 3G 发送请求,则不存在延迟。
但它确实只发生在 Android 2.2 和 2.3 上,如果我在例如 2.1-update1 上运行它,它在 wifi 上也能正常工作。
但是,在初始请求之后立即发送请求时 - 它在 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);这也是我计算 ms 的那一行。
有人遇到过这个问题吗?我发现这种延迟非常烦人,我的用户也会如此。模拟器的行为方式与运行 2.1-update1 的 Xperia Mini Pro 相同,它可以在 Wifi 上正常运行,而运行 CyanogenMod 7 (2.3) 的 HTC Desire 则无法正常运行。
【问题讨论】:
标签: android https wifi httpclient delay