一、Handler的定義:
                                    主要接受子執行緒傳送的資料, 並用此資料配合主執行緒更新UI.
                                   解釋: 當應用程式啟動時,Android首先會開啟一個主執行緒 (也就是UI執行緒) ,
                            主執行緒為管理介面中的UI控制元件,進行事件分發, 比如說, 你要是點選一個 Button ,Android會分發事件到Button上,來響應你的操作。 
                            如果此時需要一個耗時的操作,例如: 聯網讀取資料,   
                            或者讀取本地較大的一個檔案的時候,你不能把這些操作放在主執行緒中,,如果你放在主執行緒中的話,介面會出現假死現象, 如果5秒鐘還沒有完成的話,,會收到Android系統的一個錯誤提示 
                            “強制關閉”.  這個時候我們需要把這些耗時的操作,放在一個子執行緒中,因為子執行緒涉及到UI更新,,Android主執行緒是執行緒不安全的,也就是說,更新UI只能在主執行緒中更新,子執行緒中操作是危險的.
                            這個時候,Handler就出現了.,來解決這個複雜的問題 ,    由於Handler執行在主執行緒中(UI執行緒中), 
                            它與子執行緒可以通過Message物件來傳遞資料,
                            這個時候,Handler就承擔著接受子執行緒傳過來的(子執行緒用sedMessage()方法傳弟)Message物件,(裏面包含資料)  ,
                            把這些訊息放入主執行緒佇列中,配合主執行緒進行更新UI。
                          二、Handler一些特點
                                 handler可以分發Message物件和Runnable物件到主執行緒中,
                            每個Handler例項,都會繫結到建立他的執行緒中(一般是位於主執行緒),
                                   它有兩個作用: (1):  安排訊息或Runnable 在某個主執行緒中某個地方執行,
                            (2)安排一個動作在不同的執行緒中執行
                                
                                   Handler中分發訊息的一些方法
                                   post(Runnable)
                                   postAtTime(Runnable,long)
                                   postDelayed(Runnable long)
                                   sendEmptyMessage(int)
                                   sendMessage(Message)
                                   sendMessageAtTime(Message,long)
                                   sendMessageDelayed(Message,long)
                          
                                 以上post類方法允許你排列一個Runnable物件到主執行緒佇列中,
                                   sendMessage類方法, 允許你安排一個帶資料的Message物件到佇列中,等待更新.
                          
                          三、Handler例項
                               (1) 子類需要繼承Hendler類,並重寫handleMessage(Message msg) 方法, 用於接受執行緒資料
                          
                               以下為一個例項,它實現的功能為 : 通過執行緒修改介面Button的內容
                          
                            - public class MyHandlerActivity extends Activity {
-     Button button;
-     MyHandler myHandler;
-     protected void onCreate(Bundle savedInstanceState) {
-         super.onCreate(savedInstanceState);
-         setContentView(R.layout.handlertest);
-         button = (Button) findViewById(R.id.button);
-         myHandler = new MyHandler();
-         // 當建立一個新的Handler例項時, 它會繫結到當前執行緒和訊息的佇列中,開始分發資料
-         // Handler有兩個作用, (1) : 定時執行Message和Runnalbe 物件
-         // (2): 讓一個動作,在不同的執行緒中執行.
-         // 它安排訊息,用以下方法
-         // post(Runnable)
-         // postAtTime(Runnable,long)
-         // postDelayed(Runnable,long)
-         // sendEmptyMessage(int)
-         // sendMessage(Message);
-         // sendMessageAtTime(Message,long)
-         // sendMessageDelayed(Message,long)
-      
-         // 以上方法以 post開頭的允許你處理Runnable物件
-         //sendMessage()允許你處理Message物件(Message裡可以包含資料,)
-         MyThread m = new MyThread();
-         new Thread(m).start();
-     }
-    
-     class MyHandler extends Handler {
-         public MyHandler() {
-         }
-         public MyHandler(Looper L) {
-             super(L);
-         }
-         // 子類必須重寫此方法,接受資料
-         @Override
-         public void handleMessage(Message msg) {
-             // TODO Auto-generated method stub
                            
-             Log.d(“MyHandler”,
                              “handleMessage……”);
-             super.handleMessage(msg);
-             // 此處可以更新UI
-             Bundle b = msg.getData();
-             String color =
                              b.getString(“color”);
-             MyHandlerActivity.this.button.append(color);
-         }
-     }
-     class MyThread implements Runnable {
-         public void run() {
-             try {
-                
                              Thread.sleep(10000);
-             } catch (InterruptedException e) {
                            
-                 // TODO
                              Auto-generated catch block
-                
                              e.printStackTrace();
-             }
-            
                              Log.d(“thread…….”, “mThread……..”);
-             Message msg = new Message();
-             Bundle b = new Bundle();// 存放資料
                            
-             b.putString(“color”,
                              “我的”);
-             msg.setData(b);
-            
                              MyHandlerActivity.this.myHandler.sendMessage(msg); // 向Handler傳送訊息,更新UI
-         }
-     }
- }
-  本文來自新浪部落格