【发布时间】:2014-10-22 13:57:32
【问题描述】:
我正在从 REST 服务器读取数据。有时我会遇到很长的延迟,但在沟通之后:
protected JSONObject doInBackground(String... params)
...
HttpResponse response;
client = new DefaultHttpClient();
...
HttpPost post = new HttpPost(sendURL);
StringEntity se = new StringEntity( postJSON.toString(), "UTF-8");
Log.d(getClass().getName(), String.format("post object: %s", postJSON.toString()));
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
post.setEntity(se);
response = client.execute(post);
Log.d(getClass().getName(), "Response received");
if(response!=null){
String responseStr = null;
if (response.getStatusLine().getStatusCode() == 200){
try {
Log.d(getClass().getName(), "Response status OK");
responseStr = EntityUtils.toString(response.getEntity());
Log.d(getClass().getName(), "Response String read: "
...
在随机的时间间隔内,任务需要很长时间才能完成,从而造成无法接受的用户体验。日志中的时间戳表明对 response.getEntity() 的调用需要很长时间,30 秒甚至更多。诸如this 之类的问题表明对 getEntity() 的调用实际上确实涉及网络通信。是这样吗?还是因为 AsyncTask 没有获取资源而发生延迟?
【问题讨论】:
-
您的实体有多大?你的服务器有多快?
-
延迟不是响应大小的函数。由于我使用的是单个服务器,因此它的响应性本身不是问题。假设 getEntity 仍然是通信过程的一部分,它在任何给定时间的工作量都可能是一个问题。这确实是个问题。
-
是的,
getEntity()仍然是通信过程的一部分。