HandlerFrame一個基于觀察者模式采用信息分發機制實現跨界面handler通訊框架

啟示錄: HandlerFrame是一個基于觀察者模式采用信息分發機制實現跨界面Handler通訊框架,整個項目里面只存在一個Handler實例對象。

HandlerFrame下載地址-點擊進入

在實際開發中你是不是也曾經因為handler通訊造成內存吃緊過呢?又或者因為無法跟其它頁面通訊而苦苦摸索過呢?

恭喜你答對了,這些我都遇到過。

何時使用跨界面通訊:當前頁面有些操作成功之后會影響其它頁面數據變化,就要使用跨界面通訊。

相信做過電商的朋友們應該都知道購物車概念吧!(購物車-->購買-->清空購物車)購物車的概念差不多都是這個樣子的。

購買成功是不是就要發消息告訴購物車頁面刷新數據,此時就要跨界面通訊了。

前言:HandlerFrame的由來

我封裝的HandlerFrame框架其實是因為有人給我靈感才完成的。

這個人就是Nohttp的作者嚴振杰-嚴振杰的博客-點擊進入

因為那段時間我確實遇到因為Handler造成的內存吃緊問題,正好他封裝了一個超簡單的Handle,優化內存的Handler工具。然后我就拿來用參考一下。在參考的過程中我發現他寫的這個調用起來太繁瑣了,而且耦合性太高了,所以我就在他的那個工具靈感下重新封裝一個‘使用觀察者模式對信息發送采取信息分發機制去封裝。讓操作界面之間通訊完全解耦,調用起來沒有那么繁瑣。優化Handler內存,且跨界面通訊。’的Handler框架。

透露一個小秘密0_0....我在封裝好這個Handler框架時,我特么都不知道什么是觀察者模式信息分發機制(一直都是一個人開發,沒有人指點,所以......你懂的。)。你是不是想問,既然你都不知道什么是觀察者模式,那特么你還說你這個是基于觀察者模式封裝的?哈哈....這個其實也要感謝嚴振杰-嚴振杰的博客-點擊進入了。因為我把封裝好的框架發給他看時,是他告訴我這個封裝是用觀察者模式去的。我記得我當時還特意去搜了一下,才知道這確實觀察者模式封裝。

我發現只要你的技術達到一個高度之后,你寫的代碼不知不覺就進入你都不曾了解的世界里面去了。

主題內容

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? HandlerFrame架構圖(畫的不好,請多多見諒)

HandlerFrame架構
主要部分

一:BaseHandler核心類(代碼截圖請實際代碼為主)

BaseHandler繼承Handler采取單例模式

然后在BaseHandler對象里面用稀疏數組SparseArray存儲OnBaseHandlerUpDateListener接口實現對象,然后通過實現Handler中的handleMessage()去發送信息給OnBaseHandlerUpDateListener接口實現對象。

SparseArray存儲的key通過OnBaseHandlerGetKeyListener接口去獲取訂閱對象的唯一ID。SparseArray存儲的value用SoftReference軟引用做載體存儲。

如果注銷訂閱,通過OnFactoryOperateListener接口去清除訂閱對象生成存儲的ID。

BaseHandler類實現OnBaseHandlerMethodListener接口對SparseArray對象的增刪查調等方面的操作。

BaseHandler對象01


BaseHandler對象02


BaseHandler對象03

二:BaseHandlerOperate核心類(代碼截圖請實際代碼為主)

BaseHandlerOperate主要是通過操作OnBaseHandlerMethodListener接口對BaseHandler進行控制。

BaseHandlerOperate實現OnBaseHandlerGetKeyListener接口,在重寫handlerGetKey()方法中通過BaseHandlerFactoryId對象去生成訂閱對象唯一的ID值。

BaseHandlerOperate實現OnFactoryOperateListener接口對BaseHandlerFactoryId對象中的訂閱對象ID做注銷操作。

BaseHandlerOperate實現OnBaseHandlerOperateListener接口是為了讓其他接口實現方法屏蔽對外操作。提現接口隔離原則。

BaseHandlerOperate類是為了更好讓BaseHandler和Activity解耦。

BaseHandlerOperate對象01


BaseHandlerOperate對象02
BaseHandlerOperate對象03


BaseHandlerFactoryId對象是專門生產訂閱對象唯一ID對象。通過算法保證訂閱對象生成的ID值唯一性。具體怎么實現的請參考代碼。


三:OnBaseHandlerMethodListener接口(代碼截圖請以實際代碼為主)


OnBaseHandlerMethodListener接口

四:OnBaseHandlerUpDateListener接口(代碼截圖請實際代碼為主)


OnBaseHandlerUpDateListener接口

簡單使用說明(代碼截圖請以Demo實際代碼為主)

用一個Acitivty基類去實現OnBaseHandlerUpDateListener接口,然后獲取BaseHandlerOperate實例。

舉了個栗子

然后繼承BaseActivity的子類就可以調用BaseHandlerOperate里面的方法去進行你想要的操作就可以了,

舉了個栗子
當前對象通過BaseHandlerOperate向Basehandler指定注冊對象發送信息

HandlerFrame下載地址-點擊進入

如果你能使用期間發現問題,代表你有一雙發現問題眼睛。如果你能把問題反饋給我,說明你有一份樂于助人的心靈。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容