【发布时间】:2014-08-02 22:14:24
【问题描述】:
我不是经验丰富的安卓开发者,但我是一名程序员。我想获得一些关于如何在 android 中使用 AsyncTasks 的建议。我知道如何实现它们,但困扰我的是,如果我想让结果对 UI 可见,我必须从 AsyncTask 对 UI 进行更改。 我不喜欢这样,因为我或多或少地将 AsyncTask 想象成一个用于获取数据或进行一些计算的线程。我尝试实现对 Activity 的回调,然后更改 UI。但我不确定这是否是一个好习惯。
Google 文档说:“AsyncTask 允许正确且轻松地使用 UI 线程。此类允许执行后台操作并在 UI 线程上发布结果,而无需操作线程和/或处理程序。”
简而言之,我不喜欢 AsyncTaks 更改 UI。我将 AsyncTask 视为获取数据的东西,并将 Activites 视为与 UI 交互的“控制器”。有什么好的模式可以使用 AsyncTasks 吗?或者更具体地说,可以在 onPostExecute 中对主 UI 线程进行回调吗?
【问题讨论】:
-
我知道这不是你问的,但我强烈建议不要使用 AsyncTask。为什么?因为它与您的活动/片段严重耦合。这意味着,如果您的活动/片段更改它的状态(暂停,销毁),即使您没有收到结果,您的异步任务也会被破坏。一个解法?我建议使用 EventBus(如 Otto 或 GreenDao 的 Event Bus)
-
@LeonardoFerrari:
AsyncTask不会在配置更改时被破坏,甚至不会通过 BACK 按钮破坏活动。 -
“困扰我的是,如果我想让结果对 UI 可见,我必须从 AsyncTask 对 UI 进行更改”——不,你不需要。唯一的要求是您必须从 主应用程序线程 更新 UI。
AsyncTask的doInBackground()方法很可能会触发 UI 更新。如何准确地完成 UI 更新取决于您。 “有什么好的模式可以使用 AsyncTasks 吗?” -- 有很多和其他模式不使用AsyncTask。不过,您需要先解释具体问题,因为并非所有模式都适用于所有情况。 -
我最后添加了关于回调到主 UI 线程的更具体的问题。