首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓: RunOnUiThread vs AsyncTask

安卓: RunOnUiThread vs AsyncTask
EN

Stack Overflow用户
提问于 2012-02-15 23:49:24
回答 5查看 39.2K关注 0票数 36

我相信谷歌建议开发者使用AsyncTask。但是,我想知道它在性能和内存效率上与使用“new Thread”然后调用“RunOnUiThread”有什么不同。

使用RunOnUithread的示例:

代码语言:javascript
复制
    // some code #1
    Thread t = new Thread("Thread1") {
        @Override
        public void run() {
            // some code #2
            runOnUiThread(new Runnable() {
                public void run() {
                    // some code #3 (that needs to be ran in UI thread)

                }
            });

        }
    };
    t.start();

AsyncTask:

代码语言:javascript
复制
onPreExecute() {
   // some code #1
}

doInBackground() {
   // some code #2
}

onPostExecute() {
   // some code #3
}

优点/缺点是什么?

编辑:

我不是在寻找像“更容易看到代码”,“方便开发人员”之类的答案,我实际上是在寻找幕后的技术差异。

例如,Paul Nikonowicz下面的答案就是我想要看到的答案。(但AsyncTask的行为是相同的)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-16 10:29:23

当您使用new Thread时,您实际上是在每次执行它时创建一个新线程。然而,AsyncTask使用最多128个线程的静态池,并将重用存在的旧线程。因此,串行运行AsyncTask 10次将只创建一个运行任务10次的线程,而不是10个线程。

这是许多不同之处之一。

票数 53
EN

Stack Overflow用户

发布于 2012-02-15 23:56:42

从本质上讲,这是一种便利。AsyncTask框架负责管理Thread池,并提供了一个简单易懂的界面。知道如何使用AsyncTask的人都知道,UI活动可以在onPreExecute()onPostExecute()onProgressUpdate()中进行,而所有的“繁重工作”都是在doInBackground()中完成的,在doInBackground()中您不能触摸UI。

它使开发人员可以轻松地拥有一个简单的后台任务,该任务可以轻松地将更新发布到UI线程,并在完成后返回结果。这不是魔法,这只是一个便利。

票数 13
EN

Stack Overflow用户

发布于 2012-06-15 13:56:44

根据this的说法,AsyncTask更容易使用,但有一些限制,如下所示:

  • 核心池大小和工作队列是固定的:5个池/ 10个元素
    • 它是硬编码的,不能是changed

固定为low

  • Exception的
  • 线程优先级不像Thread

那样支持处理

此外,还有另一个我没有弄清楚的区别。你可以找到并检查full source code of AsyncTask,因为Android是开源的:-)

祝你在Android中编码愉快!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9296539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档