使AsyncTask“程序化”的模式

我在很多地方使用AsyncTask没有问题。

现在使用Honeycomb,所有networkingI / O都需要与UI线程分离,在很多情况下需要在同步networking连接非常合适的地方使用AsyncTasks(对于任何networking,Honeycomb都会抛出exceptionI / o在主/ UI线程上)。

现在我基本上喜欢得到像Object result = MyAsyncTask().execute()有这样的好模式?

我发现AsyncTask的Android – devise模式和返回值是有道理的,也是GWT做的事情,但不知何故,这听起来像尾巴摇摆的狗(然后它可能只是我的谁的大脑需要更多的扭曲)。

Solutions Collecting From Web of "使AsyncTask“程序化”的模式"

对。 你很近 尝试

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

我相信你不想在UI线程上执行同步networking事务,对吧?

我使用的模式是在Activity(实现一个接收器)中保存状态,然后调用AsycTask执行onPostExecute()中的活动callback(即触发您的活动正在侦听的Intent)。 您的活动可以根据意图中的额外情况更新状态,并继续处理。 它基本上是一个在您的活动中执行您的login和其他function的状态机。 所有networkingI / O的东西都在AsycTask实例中执行,这会导致状态在完成时更新。

如果你只是想阻止你的线程,而其他线程做这个工作,你可以考虑写自己的任务抽象。 我正在想类似的东西

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