Android 提供了几种供开发者在线程中更新UI的方法,如下:

  • Activity.runOnUiThread( Runnable )
  • View.post( Runnable )
  • View.postDelayed( Runnable, long )
  • Hanlder

View.post(Runnable)方法。在post(Runnable action)方法里View获得当前线程UI线程Handler然后将action对象postHandler里。在Handler里,它将传递过来的action对象包装成一个MessageMessagecallbackaction),然后将其投入UI线程的消息循环中。在Handler再次处理该Message时,有一条分支(未解释的那条)就是为它所设,直接调用runnablerun方法。而此时,已经路由到UI线程里,因此,我们可以毫无顾虑的来更新UI

 

Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。

 

Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。

 

MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。

 

Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper

 

 

主UI线程会默认生成一个Looper和MessageQueue。其它子线程不会生成。

Looper.prepare();      生成一个Looper

Looper.loop();         让Looper开始工作,从消息队列里取消息,处理消息。
Looper.getMainLooper()   返回当前应用程序中主线程的looper

Looper.myLooper()           返回当前线程中looper

 looper.quit()                    退出此looper

posted on 2013-01-10 11:27  Snow〃冰激凌  阅读(454)  评论(0编辑  收藏  举报