編輯:關於Android編程
一.Handle的用例:
1.創建handle實例
new handle();
2.發送信息載體(Message)
sendMessage(msg);
3.處理消息
handleMessage(Message msg){};
二.原理淺析
結合以上的handle調用三部曲,我們將順籐摸瓜理清Handle、Looper、Message、MessageQueue的邏輯與關系。
1.new Handle():這個操作將生成一個Handle實例,handle實例有三個屬性mLooper、mQueue、mCallback,以下解釋這三個屬性的來歷。
1.a:mLooper = Looper.myLooper();Looper的myLooper靜態方法也很簡單、 public static Looper myLooper() { return sThreadLocal.get(); }
sThreadLocal是一個單例對象,他的類型是ThreadLocal
private static void prepare(boolean quitAllowed) { if (sThreadLocal.get() != null) { throw new RuntimeException("Only one Looper may be created per thread"); } sThreadLocal.set(new Looper(quitAllowed)); }
從該方法中可見每個線程中只可以調用一次prepare方法,即每個線程中只有一個Looper對象。
1.b:
mQueue = mLooper.mQueue;Looer對象的mQueue是一個非靜態的變量,即:
final MessageQueue mQueue;
他亦在Looper創建時候生成,MessageQueue我們暫時簡單理解為消息隊列,但是切記他並非等同於:Queue
1.c:mCallback是一個回調接口,他只有一個方法handleMessage:
public interface Callback { public boolean handleMessage(Message msg); }
這個操作正是他們之間聯系的樞紐我們一一來看,首先msg的生成,再看發送msg的動作。
2.a:msg的生成;在Message類中我們看到有個Handle類型的target,所有發送到Handle的msg都會把這個target設置為當前的Handle,如sendMessage()方法最終會有這樣一個操作:
msg.target = this;
2.b:sendMessage();無論那個重載方法最終都調用queue.enqueueMessage(msg, uptimeMillis);這個方法中會根據when這個參數來進行排隊。即在1.b中的消息隊列中排序。
3.handleMessage:處理Message的操作在Looper類中的loop方法中,回顧到1.a我們知道Looper是當前線程的一個單例,即當前線程的所有Message都會再次被處理。Loop方法中有一個死循環將遍歷mQueue中的Message並執行dispatchMessage(msg)方法:
msg.target.dispatchMessage(msg);
可見msg的target將處理自己。
方法再次回到Handle類的dispatchMessage方法
public void dispatchMessage(Message msg) { if (msg.callback != null) { handleCallback(msg); } else { if (mCallback != null) { if (mCallback.handleMessage(msg)) { return; } } handleMessage(msg); } }
如果mCallback不為空就執行mCallback的handleMessage方法,否則執行自身的handleMessage方法。
4.總結:Android通過如此巧妙的結構實現了線程間的通信,如果要弄的徹底明白,以Activity為例,在Activity中找到mainThread即我們通常說的主線程,可以清楚的看到looper的創建以及如何進行消息管理。
布局管理器都是以ViewGroup為基類派生出來的; 使用布局管理器可以適配不同手機屏幕的分辨率,尺寸大小; 如何使用XML文件定義視圖: 
在新的SDK每次創建activity時,會自動生成 public static class PlaceholderFragment extends Fragment f
Android系統進行升級的時候,有兩種途徑,一種是通過接口傳遞升級包路徑自動升級,升級完之後系統自動重啟;另一種是手動進入recovery模式下,選擇升級包進行升級,升
本文介紹在Android中實現推送方式的基礎知識及相關解決方案。推送功能在手機開發中應用的場景是越來起來了,不說別的,就我們手機上的新聞客戶端就時不j時的推送過來新的消息