Обработчики против асинхронных вызовов в Android - PullRequest
4 голосов
/ 14 марта 2011

В настоящее время я использую обработчики для вызова методов веб-сервиса, чтобы он работал в фоновом режиме. Проблема в том, что для ответа требуется больше времени, кажется, что это дороже с точки зрения производительности. Теперь я планирую пойти на Async Calls, который будет лучшим? В чем различия между обработчиками и асинхронными вызовами в Android? Пожалуйста, помогите мне найти лучшее решение.

Для справки я даю здесь несколько фрагментов кода

signIn.setBackgroundResource(R.drawable.signin_press);
changeImage=new Runnable(){
     public void run(){                                 
            signIn();
        }
    };      
signinHandler.post(changeImage);

Когда я нажимаю кнопку «Вход», я вызываю этот метод, похоже, что пользовательский интерфейс зависает на несколько минут перед вызовом метода. В этом методе для аутентификации и регистрации пользователя используются два дорогостоящих вызова веб-сервисов. Как я могу нормализовать медлительность приложения. Помоги мне.

Ответы [ 2 ]

3 голосов
/ 14 марта 2011

Есть определенные преимущества использования Thread и Handler соответственно для использования AsyncTask, это действительно зависит от вашего использования и профилирования эти преимущества против вреда, скорее всего, придут к вам.

Я бы порекомендовал статью Потоки без боли для небольшого понимания потоков в Android.

РЕДАКТИРОВАТЬ для получения дополнительной информации.

Если мы адаптируем код из статьи Painless Threading , которая была связана, вы можете получить что-то вроде этого.

  new Thread(new Runnable() {
    public void run() {
      signIn();
      signinHandler.post(new Runnable() {
        public void run() {
          //TODO: Something to notify of login complete / continue processing.
        }
      });
    }
  }).start();

В TODO вам нужно продолжить или уведомить о выполнении, я не знаю, что в данный момент обрабатывается в signIn(), поэтому, если он пересекает поток пользовательского интерфейса, его придется реорганизовать.

2 голосов
/ 14 марта 2011

AsyncTask использует внутренний пул потоков и обработчики. Это не волшебство; см. Источник . Производительность не будет заметно лучше, чем ваши собственные обработчики (за исключением того факта, что использование пула потоков может сэкономить немного накладных расходов при создании нового потока, но это ничтожно мало по сравнению с продолжительностью типичных вызовов веб-служб; несколько миллисекунд, безусловно, не окажут заметного влияния на пользователя). Учитывая количество факторов, влияющих на создание веб-запроса, что может заставить вас думать, что потоки / обработчики замедляют работу вашего приложения (в отличие от сетевого подключения, трафика сервера и т. Д.)? Профилирует ли ваш код это утверждение?

...