我不是一位经验丰富的Android开发人员,但我是一名程序员。我想得到一些关于如何在android中使用AsyncTasks的建议。我知道如何实现它们,但令我烦恼的是,如果我想让UI看到结果,我必须从AsyncTask更改UI。 我不喜欢这个,因为我认为AsyncTask或多或少是一个获取数据或进行计算的线程。我试图实现对Activity的回调,然后更改UI。但我不确定这是不是一个好习惯。
Google文档说:" AsyncTask可以正确,轻松地使用UI线程。此类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。"
简而言之,我不喜欢AsyncTaks更改UI。我认为AsyncTask是获取数据的东西,我认为Activites是"控制器"用于与UI交互。是否有任何好的模式可以使用AsyncTasks?或者更具体的是,可以在onPostExecute中对主UI线程进行回调吗?
答案 0 :(得分:2)
您为AsyncTask提供了最佳实践解释:
“AsyncTask可以正确,轻松地使用UI线程。该类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。”
要了解为什么以及如何将AsyncTask作为后台进程运行,同时有可能与UI线程进行通信,让我们来看看这个示例:
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
// Callback executed on UI thread right before starting the background process.
}
@Override
protected Void doInBackground(Void... params) {
// Background process execution.
}
@Override
protected void onPostExecute(Void args) {
// Callback executed on UI thread right after finishing the background process.
}
}.execute();
正如google所解释的那样,使用它代替自定义线程/任务,无需必须委托处理程序并为UI线程交互构建自定义回调。
在Android中,因为大多数时候你需要后台进程,因为你想要将它的结果传递/操作到一个Activity(在UI线程上运行),AsyncTask在进程前后提供这样的相互通信,可以为任何回调参数化数据。