我相信谷歌建议开发者使用AsyncTask。但是,我想知道它在性能和内存效率上与使用“new Thread”然后调用“RunOnUiThread”有什么不同。
使用RunOnUithread的示例:
// 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:
onPreExecute() {
// some code #1
}
doInBackground() {
// some code #2
}
onPostExecute() {
// some code #3
}优点/缺点是什么?
编辑:
我不是在寻找像“更容易看到代码”,“方便开发人员”之类的答案,我实际上是在寻找幕后的技术差异。
例如,Paul Nikonowicz下面的答案就是我想要看到的答案。(但AsyncTask的行为是相同的)
发布于 2012-02-16 10:29:23
当您使用new Thread时,您实际上是在每次执行它时创建一个新线程。然而,AsyncTask使用最多128个线程的静态池,并将重用存在的旧线程。因此,串行运行AsyncTask 10次将只创建一个运行任务10次的线程,而不是10个线程。
这是许多不同之处之一。
发布于 2012-02-15 23:56:42
从本质上讲,这是一种便利。AsyncTask框架负责管理Thread池,并提供了一个简单易懂的界面。知道如何使用AsyncTask的人都知道,UI活动可以在onPreExecute()、onPostExecute()和onProgressUpdate()中进行,而所有的“繁重工作”都是在doInBackground()中完成的,在doInBackground()中您不能触摸UI。
它使开发人员可以轻松地拥有一个简单的后台任务,该任务可以轻松地将更新发布到UI线程,并在完成后返回结果。这不是魔法,这只是一个便利。
发布于 2012-06-15 13:56:44
根据this的说法,AsyncTask更容易使用,但有一些限制,如下所示:
固定为low
Thread那样支持处理
此外,还有另一个我没有弄清楚的区别。你可以找到并检查full source code of AsyncTask,因为Android是开源的:-)
祝你在Android中编码愉快!
https://stackoverflow.com/questions/9296539
复制相似问题