Android訊息傳遞之元件間傳遞訊息

2021-07-23 02:13:31 字數 2727 閱讀 3300

前言:

上篇學習總結了android通過handler訊息機制實現了工作執行緒與ui執行緒之間的通訊,今天來學習一下如何實現元件之間的通訊。本文依然是為學習eventbus做鋪墊,有對比才能進步,今天主要介紹在eventbus出現之前的實現方式,通過intent方式這裡不做介紹。

需求場景:

方式一:通過動態註冊broadcastreceiver

1.)內部定義broadcastreceiver

//

同步資料廣播

private broadcastreceiver datasynreceiver = new

broadcastreceiver() }};

2.)在activity對應的生命週期註冊/解註冊 oncreate/onstart/onresume 註冊 ondestroy/onstop/onpause 解註冊

註冊

//

同步資料廣播

private broadcastreceiver datasynreceiver = new

broadcastreceiver()

});}}};

解註冊

//

解除同步資料廣播

private

void

unregisterreceiver()

3.)在觸發資料同步的地方傳送訊息

intent intent = new

intent();

intent.setaction("com.whoislcj.broadcastreceiver.datasynaction");//

設定action

intent.setpackage(getpackagename());//

intent.putextra("count", 5);//

新增附加資訊

sendbroadcast(intent);

4.)分析優缺點

缺點:廣播傳遞本身是有安全隱患的,需要設定許可權,每乙個activity都要定義、註冊,解註冊廣播無形中加大了工作量和維護成本。

方式二:通過自己管理事件監聽匯流排

1.)宣告乙個資料同步介面

/**

* 贊同步介面

*/public

inte***ce

idatasynlistener

2.)定義乙個單例管理監聽匯流排

public

class

datasynmanager }}

return

minstance;

}/*** 新增同步資料監聽

*/public

void

registerdatasynlistener(idatasynlistener autodatalistener)

if (!autolisteners.contains(autodatalistener))

}/*** 移除同步資料監聽

*/public

void

unregisterdatasynlistener(idatasynlistener autodatalistener)

if(autolisteners.contains(autodatalistener))

}/*** 執行資料同步**

@param

count

*/public

void dodatasyn(final

intcount)

new handler().post(new

runnable()

}});

}/*** 清除所有監聽者

*/public

void

release()

}/*** 贊同步介面

*/public

inte***ce

idatasynlistener

}

2.)在activity對應的生命週期新增監聽/移除監聽 oncreate/onstart/onresume 新增監聽 ondestroy/onstop/onpause 移除監聽

新增監聽

datasynmanager.getinstance().registerdatasynlistener(datasynlistener);
移除監聽

datasynmanager.getinstance().unregisterdatasynlistener(datasynlistener);
宣告乙個監聽

datasynmanager.idatasynlistener datasynlistener=new

datasynmanager.idatasynlistener()

};

3.)在觸發資料同步的地方傳送訊息

datasynmanager.getinstance().dodatasyn(5);
4.)分析優缺點

優點:相對廣播傳輸安全一點,對於匯流排數量過大的時候效率可能會比較低。

缺點:不能設定優先順序,不能終止傳遞,不能修改訊息。

小結:以上兩種方式是在eventbus出現之前我所使用的實現方式,如果有更好的實現方式,也可以互相學習一下。接下來就是來學習乙個eventbus是如何管理事件匯流排的,以及優缺點。

幹我們這行,啥時候懈怠,就意味著長進的停止,長進的停止就意味著被淘汰,只能往前衝,直到鳳凰涅槃的一天!

Android執行緒間的訊息傳遞

一 ui執行緒往其他theard傳遞訊息 1 ui端傳遞方式 a 首先讓handler ontain乙個message b 然後sendtotarget 2 其他thread接受ui執行緒傳遞內容 a 實現run方法 b looper初始化 looper.prepare c handler物件初始化...

Android 訊息傳遞

在建立handler時,handler在其構造方法中 嘗試從當前執行緒 建立hanlder例項物件的執行緒 的threadlocal中取到looper物件 並將該looper物件賦值給當前hanlder物件,同時還會將looper物件的messagequeue引用賦值給當前handler。publi...

程序間傳遞訊息

使用自定義訊息 1 首先定義訊息 例如 define wm yourmesg wm user 100 2 加入訊息響應巨集,在響應該訊息的類中 c c code?1 2 3 4 5 begin message map cchiliddlg,cdialog afx msg map end messag...