Can somebody tell me the deference between Thread and Handler? When we use Thread and when we use Handler?
I have two code in my project , But I can't understand them.
final Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// Do SomeThings
}
};
And
private class readThread extends Thread
{
Handler mHandler;
readThread(Handler h){
mHandler = h;
this.setPriority(Thread.MIN_PRIORITY);
}
@Override
public void run()
{
// Do SomeThings
}
}
And in another method call the handler like this
read_thread = new readThread(handler);
read_thread.start();
Which one run first?? Can somebody explain me?
The same: you can both execute task asynchronously without blocking your current code,
The difference: Imagine you have a Runnable r = new Runnable{...}
When you use new Thread(r).start()
, you actually created a new thread and run task asynchronously.
When you use new Handler().post(r)
(or Message
), you added the Runnable
object to Looper
and execute the code later in the same thread.
A Thread
, generally MainThread
or UIThread
contains a Looper
. When MainThread
runs, it will loop the Looper
and execute Runnable
one by one.
When Thread is preferred:
When you're doing a heavy work like network communication, or decoding large bitmap files, a new thread is preferred. If a lot of thread is needed, maybe ExecutorService
is preferred further.
https://developer.android.com/reference/java/util/concurrent/ExecutorService.html
When Handler is preferred:
When you want to update UI objects (like TextView
text) from other thread, it is necessary that UI objects could only be updated in UI Thread.
Also, when you just want to run some light code later (like the delay for 300ms) you can use Handler
because it's lighter and faster.
Please also refer to Handler vs AsyncTask vs Thread