Cập nhật: Tìm thấy câu trả lời bản thân mình, xem dưới đây :-)
Hi,Yêu cầu đăng bài HTTP bằng cách sử dụng HttpClient mất 2 giây, tại sao?
I'am hiện mã hóa một ứng dụng android mà nộp thứ trong nền sử dụng HTTP Bưu AsyncTask. Tôi sử dụng gói org.apache.http.client cho việc này. Tôi dựa trên mã của tôi trên this example.
Về cơ bản, mã của tôi trông như thế này:
public void postData() {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://192.168.1.137:8880/form");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id", "12345"));
nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
Log.e(TAG,e.toString());
} catch (IOException e) {
Log.e(TAG,e.toString());
}
}
Vấn đề là các httpclient.execute (..) dòng mất khoảng 1,5-3 giây, và tôi không hiểu tại sao. Chỉ cần yêu cầu một trang với HTTP Get mất khoảng 80 ms hoặc lâu hơn, do đó, vấn đề dường như không phải là độ trễ của mạng.
Vấn đề dường như không ở phía máy chủ, tôi cũng đã thử gửi dữ liệu tới http://www.disney.com/ với kết quả chậm tương tự. Và Firebug hiển thị thời gian phản hồi 1 ms khi POST dữ liệu lên máy chủ của tôi cục bộ.
Điều này xảy ra trên Trình mô phỏng và với Nexus One của tôi (cả với Android 2.2).
Nếu bạn muốn xem mã hoàn chỉnh, tôi đã đặt nó trên GitHub.
Nó chỉ là một chương trình giả để thực hiện HTTP Post trong nền bằng cách sử dụng AsyncTask khi ấn nút. Đây là ứng dụng Android đầu tiên của tôi và mã java đầu tiên của tôi trong một thời gian dài. Và tình cờ, cũng là câu hỏi đầu tiên của tôi về Stackoverflow ;-)
Bất kỳ ý tưởng nào tại sao httpclient.execute (httppost) mất quá nhiều thời gian?
Tôi đang gặp phải vấn đề tương tự này, ngoại trừ tệ hơn nhiều. Nó thậm chí có thể mất tới 20 giây để hoàn thành một 'HttpPost'.Tôi đã cố gắng sửa chữa của bạn nhưng nó dường như không giúp đỡ bạn. – theblang