JRu*_*Run 126 multithreading android android-handler
当我需要异步运行某些东西时,例如长时间运行的任务或使用网络的逻辑,或者出于任何原因,启动新线程并运行它可以正常工作.创建一个处理程序并运行它也可以.有什么不同?我什么时候应该使用每一个?使用a Handler而不是a 的优点/原因是Thread什么?
PS.- 为了这个问题,让我们忽略AsyncTask.- Handler().postDelayed用例对我来说很清楚,对于这个问题,我们假设我需要立即启动任务.
Foa*_*Guy 164
如果你正在做的事情是"沉重的",你应该在一个线程中做.如果你没有在它自己的线程中明确地启动它,那么它将在主(UI)线程上运行,这可能会引起用户的紧张或缓慢响应界面.
有趣的是,当您使用线程时,通常也可以使用Handler作为您正在启动的工作线程与主线程之间的通信方式.
典型的Thread/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);
}
}
};
Run Code Online (Sandbox Code Playgroud)
一般来说,带回家是你应该在任何时候使用线程,这可能是长时间运行或非常密集(即任何网络,文件IO,重型算术等).
ben*_*n75 61
处理程序和线程真的是两个不同的东西.
必须创建一个线程来执行长时间运行的作业.
Handler是两个线程之间进行通信的非常方便的对象(例如:后台线程需要更新UI.您可以使用Handler将一些Runnable从后台线程发布到UI线程).
因此,您无法在Handler或Thread之间进行选择.使用线程做繁重的工作!(如果你的后台线程会在另一个线程中触发一些工作,你可以使用一个Handler - 大多数时候是UI线程)
Pea*_*oto 18
A Handler运行在同Thread一个,Thread运行在不同的线程上.
如果需要在同一个线程上运行某些东西,通常是GUI元素或类似的东西,请使用Handler.
如果要保持主线程可以执行其他操作,请使用线程.将此用于需要大量时间的任何事情.