handler的post方法直接调用线程对象的run方法,并没有开启新的进程,也就是说用这种方式调用的话,handler的线程和activity的线程是同一个。如果想使handler和activity运行在不同的线程中,解决办法是:
HandlerThread handlerThread = new HandlerThread("handler_thread"); //先生成HandlerThread线程对象
handlerThread.start(); // 调用线程的start方法开启线程,此时该线程就是一个新启动的线程,和activity的就不是同一个线程了
此时要处理消息队列中的消息需要将Handler对象的handlerMessage方法绑定在handlerThread线程里,处理handler.getLooper()获取的消息
MyHandler myHandler = new MyHandler(handlerThread.getLooper());
Message msg = myHandler.obtainMessage(); //从消息队列中获取一个消息
msg.sendToTarget(); //将msg发送到myHandler对象进行处理
//class MyHandler
class MyHandler extends Handler{
public MyHandler()
{
}
public MyHandler(Looper looper)
{
super(looper);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
System.out.println("handler "+Thread.currentThread().getId());
System.out.println("handlerMessge");
}
}