设备w / o调试器上的Android代码,HttpClient慢

时间:2012-01-18 04:09:14

标签: java android profiling httpclient

我有一个应用程序可以调用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文件中的一个类,它包含上面的代码。所以我认为这将是应用程序范围?

0 个答案:

没有答案