这里旨在展示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());
- }
- }
-
- }