当我需要异步运行某些东西时,例如长时间运行的任务或使用网络的逻辑,或出于任何原因,
启动 新线程 并运行它可以正常工作。
创建 Handler 并运行它也可以。
有什么不同?我应该什么时候使用每一个?
使用 Handler
而不是 Thread
的优点/原因是什么?
PS。
- 为了这个问题,让我们忽略AsyncTask
。
- Handler().postDelayed
用例对我来说很清楚,为了这个问题,让我们假设我需要立即开始任务。
最佳答案
如果你正在做的任何事情都是“重”的,那么你应该在一个线程中做它。如果您没有在自己的线程中明确启动它,那么它将在主 (UI) 线程上运行,这可能会导致用户界面抖动或响应缓慢。
有趣的是,当您使用线程时,通常还可以使用 Handler 作为您正在启动的工作线程和主线程之间的通信手段。
典型的线程/处理程序交互可能如下所示:
Handler h = new Handler(){
@Override
public void handleMessage(Message msg){
if(msg.what == 0){
updateUI();
}else{
showErrorDialog();
}
}
};
Thread t = new Thread() {
@Override
public void run(){
doSomeWork();
if(succeed){
//we can't update the UI from here so we'll signal our handler and it will do it for us.
h.sendEmptyMessage(0);
}else{
h.sendEmptyMessage(1);
}
}
};
不过,总的来说,你应该在做一些可能长时间运行或非常密集的工作(即任何网络、文件 IO、繁重的算术等)时使用线程。
关于Android:什么时候应该使用 Handler(),什么时候应该使用 Thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954611/