I’m trying to use the HandlerThread class to manage thread in my application. The following code is working great :
public class ThreadA extends HandlerThread
{
private void foo()
{
//do something
}
private void bar()
{
//Do something else
}
@Override
public boolean handleMessage(Message msg) {
switch(msg.what)
{
case 1:
{
this.foo();
break;
}
case 2:
{
this.bar();
break;
}
}
return false;
}
@Override
protected void onLooperPrepared()
{
super.onLooperPrepared();
synchronized (this) {
this.AHandler = new Handler(getLooper(),this);
notifyAll();
}
}
}
1- Should i override the run() method ? In a “classic” thread most of the code is located in the run method.
2- Lets imagine i need my foo() method to be a infinite process (getting a video streaming for example).
What’s the best solution ?
- Overriding run with my foo() code ?
-
Simply adding a sleep(xxx) in foo() :
private void foo()
{
//do something
sleep(100);
foo();
}
-Using a delayed message like :
private void foo()
{
//do something
handler.sendEmptyMessageDelayed(1,100);
}
PS : Asynctask will not cover my need , so do not bother to tell me to use it.
Thanks
I think you didn’t get the idea of
HandlerThread.HandlerThreadis designed to implement thread that handles messages. What this means is that it usesLooper.loop()in itsrun()method (and that’s why you shouldn’t override it). This in turn means that you don’t need to sleep inonHandleMessage()in order to prevent thread from exiting, asLooper.loop()already takes care of this.To summarize:
If you want to learn/undestand more about
HandlerThread, read aboutLooperandHandlerclasses.