我有一个应用程序可以调用Web服务并在Android UI中显示数据。 Web服务还用于同一应用程序的基于浏览器的版本。在Android浏览器中运行的浏览器版本加载速度比我的Android App版本快。在浏览器页面加载约200ms,在我的应用程序中约1000ms。如果设计得当,我认为它应该是另一种方式。两者的Web服务都是相同的,所以这是我的Android代码:
ByteArrayEntity entity = new ByteArrayEntity(OutBuf.toByteArray());
entity.setContentType("application/octet-stream");
HttpPost post = new HttpPost(myUrlHiddenForPrivacy);
post.setEntity(entity);
//post.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpClient httpClient;
if(CacheHttpClient == null)
CacheHttpClient = new DefaultHttpClient(params);
httpClient = CacheHttpClient;
HttpResponse response = httpClient.execute(post);
HttpEntity re = response.getEntity();
Input = new RemoteStream.Input(re.getContent());
很多都没有显示,但希望你能理解基础知识,看看我是否有任何明显的问题。我曾尝试使用和不使用USE_EXPECT_CONTINUE行,因为我读过这有时会有所帮助。我的Web服务器不需要身份验证,所以我认为我不希望这样。我的Web服务支持保持连接打开,所以我添加了静态“CacheHttpClient”变量,它只是将该变量保存在内存中(全局静态变量),以便重用它。
我发送二进制数据,只有大约200字节左右,并且返回5k - 20k数据。我不能使用XML或其他因为我还不能更新服务器端。
在模拟器上运行的调试器中,httpClient.execute(post)行是大部分时间花费的地方..但调试器通常超级慢,所以我更喜欢在真实设备上进行配置。我没有可以连接到我的PC和调试的设备,但我确实有一个用于测试的设备,其中一些。有没有一种简单的方法可以在我的代码中添加一些个人资料点,我可以在设备上查看?这段代码作为AsyncTask运行 - 我想过用一些配置文件信息更新TextView或标题栏,但也许有一些更简单的东西,比如我可以在设备上写的配置文件/调试日志?
..或者有人可以告诉我为什么它从经验来看很慢? :)
编辑:HttpClientCache定义如下:
public class Client
{
public static HttpClient CacheHttpClient = null;
}
这是Client.java文件中的一个类,它包含上面的代码。所以我认为这将是应用程序范围?