如何从主线程之外的AsyncTasks执行和接收结果?

时间:2015-05-22 16:59:29

标签: android multithreading android-asynctask

我有一堆AsyncTasks及其回调(监听器接口),我不想与UI线程有任何关系。

在这里阅读答案:Android : can AsyncTask return in another thread than UI thread? 我留下了印象,我只能从UI线程启动AsyncTasks,这意味着我从他们的onPostExecute方法调用的回调也将在主线程中。

如何将所有这些逻辑从UI线程中移开?

1 个答案:

答案 0 :(得分:3)

首先,基于我在尝试在IntentService中运行AsyncTasks时遇到的一些问题,我认为您不能从非UI线程运行AsyncTask的假设是错误的。

我发现从UI线程启动AsyncTasks的问题并不是它们不运行或者它们导致崩溃,而是onPostExecute()在其他东西完成后不会自动在主UI线程上运行。我不建议这样做,但如果你愿意,你可能会这样做。

但AsyncTasks存在的全部原因基本上是有一种简单的方法来从UI线程运行一些代码,然后能够在完成后改变UI内容。因此,如果您不想对UI线程执行任何操作,则根本不需要使用AsyncTask。如果您不需要在UI线程上运行任何代码,您可以使用以下内容:

new Thread(new Runnable() {
        public void run() {
            //Do your stuff
        }
}).start();