2012-02-09 3 views
5

Я работаю над приложением, основная ответственность которого заключается в том, чтобы связаться с удаленным сервером и отобразить предоставленные данные.Синхронные вызовы службы в Android

Услуга «Мыло». Для этого я использую библиотеку ksoap, но давайте перейдем к делу.

Я занимался «вызовом службы» с использованием асинхронных задач. Все выглядело хорошо, но ...

Сервис последователен и имеет тенденцию «потерять» мои запросы, поэтому я не получаю надлежащих результатов.

Так что я решил взять синхронный подход для решения этой проблемы, но таким образом я должен предоставить дополнительные погрузочные кнопки/бары и т.д.

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

Как я могу пользоваться услугами Android? Как они лучше?

Благодарим вас за ответы.

+0

Почему вы не выполнить AsyncTasks последовательно, и только если они успешны? – dmon

+0

Что вы имеете в виду, назвав их последовательно? – Olek

ответ

15

Вы можете фактически вызвать AsyncTask в синхронизации пути:

class MyTask extends AsyncTask<Void,Void,String> 
{...} 

MyTask x = new MyTask(); 
String result = x.execute().get(); 

Смотрите docs page для AsyncTask

+1

Благодарим за быстрый ответ. Вы сами пробовали? Поэтому, говоря это, чтобы get() я предполагаю, что он просто вызывает join() в потоке, в котором он выполняется. Не будет ли get() приостановить пользовательский интерфейс или другие задачи? Существуют ли встроенные механизмы для управления очередью «Задачи»? – Olek

+0

Я думаю, что в основном я ответил на «синхронизацию». Я понял, что вы хотите заблокировать пользовательский интерфейс, пока не получите ответ. И, по крайней мере, с onPreExecute и onPostExecute вы можете безопасно запускать индикаторы выполнения и так далее. –

+0

На самом деле я не хочу замораживать пользовательский интерфейс. И я ищу способ избежать этого. Я ищу способ синхронизации большинства задач. – Olek