Android 基於Message的程序間通訊

2021-09-10 07:52:09 字數 1457 閱讀 3589

例項在最後,先簡析原理。

1、服務端重要**解析

@nullable

@override

public ibinder onbind(intent intent)

getbinder裡面是這樣的

public ibinder getbinder()
mtarget是什麼?怎麼來的?

public messenger(handler target)
messenger的構造方法裡面傳進去的

getimessenger裡面是這樣的

final imessenger getimessenger() 

mmessenger = new messengerimpl();

return mmessenger;

}}private final class messengerimpl extends imessenger.stub

}

從上面我們可以看到,mtarget是乙個messengerimpl物件,那麼asbinder實際上是返回this(framework層原始碼裡面有),也就是messengerimpl物件。我們**中用到的send方法,實際上就在messengerimpl裡面,本質上呼叫的還是handler的sendmessage方法!另外,我們可以看到的是,messengerimpl本質上也是繼承了imessenger.stub,實際山就是aidl的寫法!

2、客戶端原始碼解析

客戶端 主要是三個重點,與服務端連線serviceconnection、回傳訊息給服務端send(message msg)、接收服務端穿過來的訊息messenger下的handlemessage(message msg)。

注意一點是,回傳拿到的messenger是通過服務端傳過來的ibinder物件拿到的,主要**是

private serviceconnection mconn = new serviceconnection() 

@override

public void onservicedisconnected(componentname name)

};

new messenger(service)裡面是這樣的

public messenger(ibinder target)
在這裡,我們給mtarget賦值,保證服務端傳送訊息跟客戶端回傳用的messenger物件始終是同乙個,服務端傳送訊息給客戶端,用的是客戶端的messenger物件;客戶端傳送訊息給服務端用的是服務端的messenger物件!簡而言之就是,messenger物件會隨著訊息一起傳送過去,在另一邊執行操作!具體**是public messenger replyto;給這個replyto賦值後一起傳過去!從而實現程序之間的通訊!

參考:

python 訊息框架 訊息框架message

在網頁應用中,我們經常需要在處理完表單或其它型別的使用者輸入後,顯示乙個通知資訊給使用者。對於這個需求,django提供了基於cookie或者會話的訊息框架messages,無論是還是認證的使用者。這個訊息框架允許你臨時將訊息儲存在請求中,並在接下來的請求 通常就是下乙個請求 中提取它們並顯示。每個...

企業日誌分析之linux系統message收集展示

之前寫了收集linux系統歷史history命令,下面介紹一下系統裡日誌收集與展示的。老規矩,先看效果,滿意的話繼續看。一 效果圖 1 總覽 2 linux系統日誌收集資料總量 主要是展示所選範圍內容收集日誌總量 3 linux系統日誌收集主機數 主要是展示當前總共有多少臺主機上傳了message日...

關於Winform中的訊息框MessageBox

在 windows 窗體應用程式中向使用者提示操作時也是採用訊息框彈出的形式。訊息框是通過 messagebox 類來實現的,在 messagebox 類中僅定義了 show 的多個過載方法,該方法的作用就是彈出乙個訊息框。由於 show 方法是乙個靜態的方法,因此呼叫該方法只需要使用message...