Шаблон, чтобы сделать AsyncTask "процедурным"

Я использую AsyncTask во многих местах без проблем.

Теперь с Honeycomb все сетевые операции ввода / вывода должны быть в потоке отдельно от потока пользовательского интерфейса, что во многих случаях требует AsyncTasks в местах, где до того, как синхронное сетевое соединение было хорошо подходит (Honeycomb будет генерировать исключение для любой сети i / O в основной / ui-потоке).

Теперь мне бы хотелось получить что-то вроде Object result = MyAsyncTask().execute() есть хорошие шаблоны для этого?

Я нашел AsyncTask Android – шаблон дизайна и возвращаемые значения, который имеет смысл, а также то, как GWT делает что-то, но почему-то это звучит как помахание собаки хвостом (а потом мне может быть только то, что мозгу нужно немного крутить).

Ага. Вы близки. Пытаться

 Object result = MyAsyncTask().execute().get(); 

Я уверен, что вы не хотите выполнять синхронную сетевую транзакцию в потоке пользовательского интерфейса, правильно?

Шаблон, который я использую, заключается в том, чтобы удерживать состояние в Activity (которое реализует приемник), а затем вызывает AsycTask, который выполняет обратный вызов вашей активности в onPostExecute () (т. Е. Запускает Intent, который выполняет ваша деятельность). Затем ваша деятельность может обновить состояние в соответствии с дополнительными функциями в намерении и продолжить обработку. В основном это государственная машина, которая выполняет вашу логин и другие функции. Все сетевые операции ввода-вывода выполняются в экземплярах AsycTask, которые заставляют состояние обновляться по мере их завершения.

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

 public class MyTask <T> { // define executor here public T execute(Callable<T> c) { Future<T> t = executor.submit(c); return t.get(); } }