Android AsyncTask最佳实践/设计模式?

时间:2014-08-02 22:14:24

标签: android android-asynctask

我不是一位经验丰富的Android开发人员,但我是一名程序员。我想得到一些关于如何在android中使用AsyncTasks的建议。我知道如何实现它们,但令我烦恼的是,如果我想让UI看到结果,我必须从AsyncTask更改UI。 我不喜欢这个,因为我认为AsyncTask或多或少是一个获取数据或进行计算的线程。我试图实现对Activity的回调,然后更改UI。但我不确定这是不是一个好习惯。

Google文档说:" AsyncTask可以正确,轻松地使用UI线程。此类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。"

简而言之,我不喜欢AsyncTaks更改UI。我认为AsyncTask是获取数据的东西,我认为Activites是"控制器"用于与UI交互。是否有任何好的模式可以使用AsyncTasks?或者更具体的是,可以在onPostExecute中对主UI线程进行回调吗?

1 个答案:

答案 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在进程前后提供这样的相互通信,可以为任何回调参数化数据。