0

Немного запутанная ситуация -Почему onProgressUpdate() не звонит в Gingerbread при работе в автономном сервисе?

  • услуга поставляется в виде отдельного APK с ничем иным, чем он в манифесте;
  • Служба принимает входящие запросы и обрабатывает их с помощью MessageHandler;
  • В одном случае обработчик нерестится AsyncTask так:

    private class XHandler implements MessageHandler { 
    
        @Override 
        public void handleMessage(Message incoming) { 
    
         Bundle b = incoming.getData(); 
    
         ...    
         new XAsyncTask(...).execute(); 
        } 
    } 
    
  • учебника простые отчеты асинхронной задачи прогресса

  • ... в ICS, но не в Gingerbread.

Что это - ошибка?

Документация AsyncTask гласит: «onProgressUpdate (Прогресс ...), вызывается в потоке пользовательского интерфейса после вызова publishProgress (Progress ...)». Однако нет ли такой вещи, как поток пользовательского интерфейса для автономных сервисов?

В документации по услугам говорится: «Служба работает в основном потоке приложения, в котором он находится, b по умолчанию» - это представляет собой поток пользовательского интерфейса?

UPDATE 2012/07/10: Изменение андроида: targetSdkVersion = "10" для андроида: targetSdkVersion = "15" вызывает тот же эффект, когда приложение запускается на ICS. Работает только сочетание до сих пор targetSdkVersion = «10» работает на API 15.

+0

Почему вы ccombine Handler и AsyncTask? – Sajmon

+0

@hawaii: Может возникнуть несколько задач, порожденных за один вызов обработчика. –

ответ

0

Я думаю, что ваш вопрос о главном/Ui нить объясняется довольно хорошо на этой странице: Threads

Когда приложение запускается , система создает поток выполнения для приложения, называемый «main». Этот поток очень важен, поскольку он отвечает за отправку событий соответствующим виджетам пользовательского интерфейса, включая события рисования. Это также поток, в котором ваше приложение взаимодействует с компонентами из набора инструментов Android UI (компоненты из пакетов android.widget и android.view). Таким образом, основной поток также иногда называют потоком пользовательского интерфейса.

Не знаете, как помочь вам с вашей AsyncTask. Что ты пытаешься сделать? Как ваша Служба реализована? Что вы хотите делать, когда AsyncTask выполняется?

Почему вы не используете IntentService?

+0

IntentService слишком прост для задачи - здесь аппаратные и интернет-коммуникации происходят в фоновом режиме. Детали реализации неважны - но вот этот факт: все это работает на ICS и с пакетом услуг, упакованным в пределах одного APK - независимо от того, работает ли он в процессе приложения по умолчанию или его собственном. –

+0

Я создал два apks, один с сервисом, который показывает тост в onProgressUpdate из асинтезы и один с активностью, которая запускает службу. Я попробовал его на Android-дисках Android 2.3.3 (api level 10), и он работал нормально. Что-то более необходимо для воспроизведения вашей проблемы? –

+0

этот сложнее - он вызывает IPC-вызов в onProgressUpdate. При дальнейшем рассмотрении я решил отказаться от AsyncTask и просто реализовать его как поток. –