Loope r的loop方法 wait/notify方式从 消息队列中取出Message,根据Message的Target确定是交给哪个Handler处理。
Handler的post/postDelay方法传递进去的Runable对象,并不是普遍认为的异步方式。而是同步的直接调用 Runable对象的run()方法,所以真正的异步使用Handler还是需要自己使用线程或者AsyncTask。
post()的使用场景可以是延迟执行的主线程任务,比如定时更新一下进度条,并不是异步的场景。取消掉post可以使用Handler.removeCallback()post也会把Runable对象封装成Mesaage对象。整个过程就只有一个Message队列。
Message可以传递arg1,arg2,obj,bundle对象等。这些可以在Handler的handleMessage()中处理。 handleMessage()运行在主线程中。
private class FuelResourceHandler extends WeakReferenceHandler<FuelResourceView> { public FuelResourceHandler(FuelResourceView reference) { super (reference); } @Override protected void handleMessage(FuelResourceView reference, Message msg) { switch (msg.what) { case SERVICE_STATUS: makeBtnGray(); //按钮置灰 break ; } } } |