ProgressDialog зависает при попытке запустить службу с асинхронной задачей - PullRequest
1 голос
/ 15 ноября 2010

У меня есть этот код внутри моей асинхронной задачи:

@Override
protected void onPreExecute() {
    waitDialog = new ProgressDialog(context);           
    waitDialog.setTitle(R.string.wait_title);           
    waitDialog.setMessage(context.getString(R.string.wait_body));
    waitDialog.setIndeterminate(true);
    waitDialog.show();
}

@Override
protected Boolean doInBackground(Void... unused) {
    Intent serviceIntent = new Intent(context, PublisherService.class);
    saveSettings(false);
    startService(serviceIntent);
    return serviceIsRunning();
}

Появляется диалоговое окно, но пока запускается моя служба (а это занимает несколько секунд), диалог выполнения заморожен. Если я использую простой SystemClock.sleep() внутри моего doInBackground() звонка, он работает нормально.

Может кто-нибудь сказать мне, почему это происходит и как решить проблему?

Спасибо

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

Не следует запускать какие-либо службы из потоков или асинхронных задач.Сервис может запустить свой собственный поток и выполнить всю работу там.Или можно связать со службой в onPreExecute () и вызвать ее методы из doInBackground.Прочитайте пример локального сервиса здесь http://developer.android.com/reference/android/app/Service.html

0 голосов
/ 16 ноября 2010

Если вы используете SystemClock.sleep() где?Вы имеете в виду вместо создания сервиса?Ну, прежде всего, сервисы и любые другие действия создаются в потоке пользовательского интерфейса.Таким образом, запуск службы в асинхронном режиме ничего не дает.

...