模式使AsyncTask“程序化”

时间:2011-06-13 08:11:18

标签: android android-asynctask

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

现在使用Honeycomb,所有网络I / O都需要与UI线程分开,在很多情况下需要AsyncTasks,在同步网络连接非常适合之前(Honeycomb将抛出异常)主/ ui线程上的任何网络i / o)。

现在我基本上想得到类似Object result = MyAsyncTask().execute()这样的东西吗?

我发现AsyncTask Android - Design Pattern and Return Values是有意义的,也是GWT做事的方式,但不知怎的,这听起来像是在尾巴上摇着狗(然后它可能只是我的大脑需要更多的扭曲)。

3 个答案:

答案 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();
    }
 }