前言:
上篇學習總結了android通過handler訊息機制實現了工作執行緒與ui執行緒之間的通訊,今天來學習一下如何實現元件之間的通訊。本文依然是為學習eventbus做鋪墊,有對比才能進步,今天主要介紹在eventbus出現之前的實現方式,通過intent方式這裡不做介紹。
需求場景:
方式一:通過動態註冊broadcastreceiver
1.)內部定義broadcastreceiver
//2.)在activity對應的生命週期註冊/解註冊 oncreate/onstart/onresume 註冊 ondestroy/onstop/onpause 解註冊同步資料廣播
private broadcastreceiver datasynreceiver = new
broadcastreceiver() }};
註冊
//解註冊同步資料廣播
private broadcastreceiver datasynreceiver = new
broadcastreceiver()
});}}};
//3.)在觸發資料同步的地方傳送訊息解除同步資料廣播
private
void
unregisterreceiver()
intent intent = new4.)分析優缺點intent();
intent.setaction("com.whoislcj.broadcastreceiver.datasynaction");//
設定action
intent.setpackage(getpackagename());//
intent.putextra("count", 5);//
新增附加資訊
sendbroadcast(intent);
缺點:廣播傳遞本身是有安全隱患的,需要設定許可權,每乙個activity都要定義、註冊,解註冊廣播無形中加大了工作量和維護成本。
方式二:通過自己管理事件監聽匯流排
1.)宣告乙個資料同步介面
/**2.)定義乙個單例管理監聽匯流排* 贊同步介面
*/public
inte***ce
idatasynlistener
public2.)在activity對應的生命週期新增監聽/移除監聽 oncreate/onstart/onresume 新增監聽 ondestroy/onstop/onpause 移除監聽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
}
新增監聽
datasynmanager.getinstance().registerdatasynlistener(datasynlistener);移除監聽
datasynmanager.getinstance().unregisterdatasynlistener(datasynlistener);宣告乙個監聽
datasynmanager.idatasynlistener datasynlistener=new3.)在觸發資料同步的地方傳送訊息datasynmanager.idatasynlistener()
};
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...