当我需要一些东西来异步运行时,比如长时间运行的任务或使用网络的逻辑,或者出于任何原因,启动并运行一个新的线程就可以了。创建并运行处理程序也同样有效。有什么关系呢?我应该在什么时候使用每一个?使用Handler
而不使用Thread
的优势/理由是什么
PS。-为了这个问题,让我们忽略AsyncTask
。- Handler().postDelayed
用例对我来说很清楚,为了这个问题,让我们假设我需要立即开始任务。
发布于 2012-12-19 22:40:48
如果你正在做的任何事情都是“沉重的”,你应该在线程中做它。如果你没有在它自己的线程中显式地启动它,那么它将在主(UI)线程上运行,用户可能会注意到主(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、繁重的算术等)时,都应该使用线程。
发布于 2012-12-19 22:48:20
Handler和Thread实际上是两个不同的东西。
必须创建一个线程来执行长时间运行的作业。
Handler是在两个线程之间进行通信的非常方便的对象(例如:后台线程需要更新UI。您可以使用处理程序将一些可运行的代码从后台线程发送到UI线程)。
所以你在Handler和Thread之间没有选择。使用线程来做繁重的工作!(如果您的后台线程将触发某些工作在另一个线程中完成-大多数时间是UI线程),则可以使用处理程序。
发布于 2015-08-03 12:02:32
Handler
和Thread
是两个不同的东西,但它们并不矛盾。您可以同时拥有一个Handler
和一个Thread
,实际上每个Handler
都必须在一个Thread
中运行。
有关更多详细信息,您可能希望使用check out this article。
https://stackoverflow.com/questions/13954611
复制相似问题