这里旨在展示HandlerThread的使用方法,也是为自己作个笔记。希望对新手有所帮助。下面是代码
-
public class HandlerService extends Service {
-
-
private HandlerDemoThread thread=null;
-
-
private MyHandler myHandler=null;
-
-
-
@Override
-
public IBinder onBind(Intent arg0) {
-
// TODO Auto-generated method stub
-
return null;
-
}
-
-
@Override
-
public void onCreate() {
-
//第一个参数是线程的名称,第二个这个是线程的优先级,可以组合使用(这里是让线程后台运行,并且优先级最低。因为这里是在service写的,通常线程不要过多占用CPU)
-
thread=new HandlerDemoThread("HandlerDemo",Process.THREAD_PRIORITY_BACKGROUND+Process.THREAD_PRIORITY_LESS_FAVORABLE);
-
thread.start();
-
myHandler =new MyHandler(thread.getLooper());
-
-
}
-
-
@Override
-
public int onStartCommand(Intent intent, int flags, int startId) {
-
-
//android 官方建议我们使用这种方式获得Message对象和发送消息。
-
Message m=myHandler.obtainMessage();
-
m.arg1=6;
-
m.sendToTarget();
-
// TODO Auto-generated method stub
-
return START_STICKY;
-
}
-
-
//继承了HandlerThread,重写了onLooperPrepared
-
private class HandlerDemoThread extends HandlerThread{
-
-
public HandlerDemoThread(String name, int priority) {
-
super(name, priority);
-
}
-
-
//在这里执行的代码是在后台执行的,尽可以把费时的操作写这里。
-
@Override
-
protected void onLooperPrepared() {
-
-
}
-
}
-
-
//自定义Handler
-
private class MyHandler extends Handler{
-
-
public MyHandler(Looper looper) {
-
super(looper);
-
}
-
-
@Override
-
public void handleMessage(Message msg) {
-
//显示这个Toast的原因在于想试试在分支线程中使用Message处理消息同样可以更新UI。最后一句打印证明这是在分支线程中执行。
-
Toast.makeText(HandlerService.this, "this is son thread", Toast.LENGTH_LONG).show();
-
System.out.println("msg.arg-->"+msg.arg1);
-
System.out.println("Thread's name is "+Thread.currentThread().getName());
-
}
-
}
-
- }