我在许多地方使用AsyncTask而没有问题。
现在使用Honeycomb,所有网络I / O都需要与UI线程分开,在很多情况下需要AsyncTasks,在同步网络连接非常适合之前(Honeycomb将抛出异常)主/ ui线程上的任何网络i / o)。
现在我基本上想得到类似Object result = MyAsyncTask().execute()
这样的东西吗?
我发现AsyncTask Android - Design Pattern and Return Values是有意义的,也是GWT做事的方式,但不知怎的,这听起来像是在尾巴上摇着狗(然后它可能只是我的大脑需要更多的扭曲)。
答案 0 :(得分:13)
烨。你很亲密尝试
Object result = MyAsyncTask().execute().get();
答案 1 :(得分:4)
我确定你不想在UI线程上执行同步网络事务,对吧?
我使用的模式是在Activity(实现接收器)中保持状态,然后调用AsycTask,它在onPostExecute()中执行对您的活动的回调(即,触发您的活动正在侦听的Intent)。然后,您的活动可以根据意图中的额外内容更新状态,并继续处理。它基本上是您的Activity中保存的状态机,它执行您的登录和其他功能。所有网络I / O内容都在AsycTask实例中执行,这会导致状态在完成时更新。
答案 2 :(得分:1)
如果你只想阻止你的线程,而其他线程完成这项工作,你可以考虑编写自己的任务抽象。我在考虑像
这样的东西public class MyTask <T> {
// define executor here
public T execute(Callable<T> c) {
Future<T> t = executor.submit(c);
return t.get();
}
}