觀察者模式
首先在Android中,我們往ListView添加數(shù)據(jù)后祖凫,都會(huì)調(diào)用Adapter的notifyDataChanged()方法琼蚯,其中使用觀察者模式。
當(dāng)ListView的數(shù)據(jù)發(fā)生變化時(shí)惠况,調(diào)用Adapter的notifyDataSetChanged()函數(shù)遭庶,這個(gè)函數(shù)又會(huì)調(diào)用DataSetObservable的notifyChanged函數(shù),這個(gè)函數(shù)會(huì)調(diào)用所有觀察者(AdapterDataSetObservable)的onChanged方法稠屠,在onChanged函數(shù)又會(huì)調(diào)用ListView重新布局的函數(shù)使得ListView刷新界面峦睡。
Android中應(yīng)用程序發(fā)送廣播的過(guò)程:
● 通過(guò)sendBroadcast把一個(gè)廣播通過(guò)Binder發(fā)送給ActivityManagerService,ActivityManagerService根據(jù)這個(gè)廣播的Action類型找到相應(yīng)的廣播接收器权埠,然后把這個(gè)廣播放進(jìn)自己的消息隊(duì)列中榨了,就完成第一階段對(duì)這個(gè)廣播的異步分發(fā)。
● ActivityManagerService在消息循環(huán)中處理這個(gè)廣播攘蔽,并通過(guò)Binder機(jī)制把這個(gè)廣播分發(fā)給注冊(cè)的ReceiverDispatcher龙屉,ReceiverDispatcher把這個(gè)廣播放進(jìn)MainActivity所在線程的消息隊(duì)列中,就完成第二階段對(duì)這個(gè)廣播的異步分發(fā)满俗。
● ReceiverDispatcher的內(nèi)部類Args在MainActivity所在的線程消息循環(huán)中處理這個(gè)廣播转捕,最終是將這個(gè)廣播分發(fā)給所注冊(cè)的BroadcastReceiver實(shí)例的onReceiver函數(shù)進(jìn)行處理。