jcl*_*ova 36 performance multithreading android android-asynctask
我相信Google建议开发人员使用AsyncTask.但是,我想知道它与使用"新线程"然后在性能和内存效率方面调用"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();
Run Code Online (Sandbox Code Playgroud)
与
的AsyncTask:
onPreExecute() {
// some code #1
}
doInBackground() {
// some code #2
}
onPostExecute() {
// some code #3
}
Run Code Online (Sandbox Code Playgroud)
有什么优点/缺点?
编辑:
我不是在寻找像'更容易看到代码','方便开发人员'等答案.我实际上是在寻找幕后的技术差异.
例如,Paul Nikonowicz在下面的回答就是我想要的答案.(但AsyncTask的行为相同)
Ran*_*ku' 52
当你使用时new Thread
,每次执行时都会创建一个新线程.AsyncTask
但是,使用最多128个线程的静态池,并且只要它存在就会重用旧线程.因此,在串行中运行AsyncTask 10次只会创建一个运行任务10次而不是10个线程的线程.
这是许多人之间的差异之一.
Bri*_*uis 13
基本上这是一种便利.该AsyncTask
框架涉及管理Thread
池并提供简单易懂的界面.这是众所周知的-由那些知道如何使用AsyncTask
-这UI活动在继续onPreExecute()
,onPostExecute()
并且onProgressUpdate()
,所有的"繁重"的在做doInBackground()
,你不能碰的UI.
它使开发人员可以轻松地拥有一个简单的后台任务,可以轻松地将更新发布到UI线程并在完成后返回结果.这不是魔术,它只是一种便利.
根据这个,AsyncTask
更容易使用,但像下面这样一些限制:
Thread
另外,我还没有发现另一个差异。由于Android是开源的,因此您可以找到并检查AsyncTask的完整源代码:-)
祝您在Android中编码愉快!