今天來講說Android一個重要類吧:Handleride
(我寫的博客風格不適合新手,由於我討厭新手教學,我都是直奔主題,不交代來龍去脈)oop
你們都知道Handler的用法通常是線程間的通信,固然,一個線程內也能夠用Handler來通信。post
Handler發消息和回消息有三種回調方式:spa
第一種,比較少見,sendmessage線程
private Handler mHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { return false; } });
第二種,常見的:sendmessage()以後在handleMessage裏面處理消息設計
private Handler mHandler2 = new Handler() { @Override public void handleMessage(Message msg) { } }
第三種,更常見的post,回調方法是run。。。不要看到run就認爲是在別的線程,這裏run是在主線程裏code
new Handler().post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } });
有興趣的能夠看看Handler的源碼,回調的時候有判斷這三種狀況,決定具體回調哪個blog
注意:Handler的默認構造方法是獲取當前線程的Looper,而默認的一個線程是不帶Looper的,須要再線程中定義Handler,就須要Looper.looper()隊列
private class Customthread implements Runnable { @Override public void run() { //線程中啓動Looper,開始消息循環 Looper.prepare(); Handler hander = new Handler() { public void handleMessage(Message msg) { Log.i(TAG, "77777" + "當前線程爲:" + Thread.currentThread()); } }; hander.sendEmptyMessage(1); hander.sendEmptyMessage(1); Looper.loop(); } }
這樣Handler纔會收到消息,看了源碼就知道,Looper.prepare()就是建立了一個Looper,而後開始循環讀取消息get
若是不想這麼麻煩怎麼辦呢,在Handler的構造方法裏面寫Looper.getMainLooper()就能夠了,這樣Handler就是用UI線程的Looper,消息的隊列是UI線程的隊列
另外再說一個類吧,HandlerThread,不想像上面這麼麻煩的話,就建一個HandlerThread類,這個線程自帶Looper和消息循環,IntentService就是這麼設計的,看看源碼就知道了 。
準備睡覺了。。。感謝各位粉絲的關注和留言,下回咱說說View的傳遞機制