Профиль кода Android на устройстве без отладчика, HttpClient медленный - PullRequest
1 голос
/ 18 января 2012

У меня есть приложение, которое выполняет вызовы веб-службы и отображает данные в пользовательском интерфейсе Android. Веб-сервис также используется для браузерной версии этого же приложения. Версия браузера, работающая в браузере Android, загружается быстрее, чем версия моего приложения для Android. В браузере страницы загружаются около 200 мс, в моем приложении около 1000 мс. Я думаю, что все должно быть наоборот, если все сделано правильно. Веб-сервис одинаков для обоих, вот мой код 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, так как я читал, что иногда может помочь. Мой веб-сервер не требует аутентификации, поэтому я не думаю, что хочу этого в моем случае. Мой веб-сервис поддерживает сохранение соединения открытым, поэтому я добавил статическую переменную «CacheHttpClient», которая просто хранит эту переменную в памяти (глобальная статическая переменная), чтобы она использовалась повторно.

Я отправляю двоичные данные, всего около 200 байтов или около того, и возвращаю данные 5–20 КБ. Я не могу использовать XML или другое, потому что пока не могу обновить серверную часть.

В отладчике, работающем на эмуляторе, строка httpClient.execute (post) находится там, где тратится большая часть времени ... но в целом отладчик очень медленный, поэтому я бы предпочел профилировать на реальном устройстве. У меня нет устройства, к которому я могу подключиться и отладить, но у меня есть устройство, которое я использую для тестирования, некоторые из них. Есть ли простой способ добавить несколько точек профиля в мой код, которые я могу просмотреть на устройстве? Этот код работает как AsyncTask - я думал об обновлении TextView или строки заголовка с некоторой информацией профиля, но, возможно, есть что-то более простое, например, журнал профилей / отладки, в который я могу записать на устройстве?

.. или, может быть, кто-то может просто сказать мне, почему это медленно из опыта? :)

Редактировать: HttpClientCache определяется так:

public class Client
{
    public static HttpClient CacheHttpClient = null;
}

Это класс внутри файла Client.java, того же класса, который содержит приведенный выше код. Поэтому я думаю, что это будет область применения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...