android - 如何在主线程之外执行和接收来自 AsyncTasks 的结果?

标签 android multithreading android-asynctask

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

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

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

最佳答案

首先,基于我之前在 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();

关于android - 如何在主线程之外执行和接收来自 AsyncTasks 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30402152/

相关文章:

java - 如何将 Fragment 的上下文转换为界面

android - AsyncTask 的 onPostExecute 里面的 AsyncTask?

android - 第一个 Android 应用程序(32/64 位问题?)

c# - 多线程代码中频繁出现滞后峰值

Android - 按标题搜索 Play 商店

c++ - C++中的多线程服务器,如何终止线程并很好地清理

c++ - 如何放置线程数组的动态大小

android - 在执行 onPostExecute(Void result) android 之后调用 onListItemClick()

android - android 项目中的 Java 文件夹和 src 为空

android - Android Studio错误:程序类型已存在:org.objectweb.asm.Edge