日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Android觀察者模式的使用與優劣

瀏覽:28日期:2022-09-22 16:05:59

一、簡介

觀察者模式(又被稱為發布-訂閱(Publish/Subscribe)模式,屬于行為型模式的一種,它定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態變化時,會通知所有的觀察者對象,使他們能夠自動更新自己。該模式一個重要作用就是解耦,將被觀察者和觀察者進行解耦,使他們之間的依賴性更小

二、使用場景

關聯行為場景,需要注意的是關聯行為是可拆分的而不是“組合”關系事件多級觸發場景跨系統的消息交換場景,如消息隊列、事件總線的處理機制

三、簡單實現

這里我們以微信公眾號的訂閱為例。公眾號當其更新內容時就會推送給訂閱了該公眾號的讀者。

//被觀察者 public class Wechat extends Observable{ public void postNewPublication(String content){ setChanged(); notifyObservers(content); } } //觀察者 public class Reader implements Observer{ public String name ; public Reader(String name) { this.name = name; } @Override public void update(Observable o, Object arg) { Log.i(TAG, 'update: wechat is update content is :'+arg); } } public void test(){ Wechat wechat=new Wechat(); Reader reader1=new Reader('reader1'); Reader reader2=new Reader('reader2'); Reader reader3=new Reader('reader3'); wechat.addObserver(reader1); wechat.addObserver(reader2); wechat.addObserver(reader3); wechat.postNewPublication('up up up'); }

這里需要注意的是Observer和Observable是JDK內置的類,表示觀察者和被觀察者。

四、觀察者模式在Android中應用

ListView和RecycleView 的notifyDataSetChanged

當我們在使用ListView或RecycleView時如果數據發生變化我們會調用Adapter的notifyDataSetChanged()方法,如下所示

public void notifyDataSetChanged() { mDataSetObservable.notifyChanged(); }

在方法內部調用了mDataSetObservable.notifyChanged,這里的mDataSetObservable是一個DataSetObservable實例

private final DataSetObservable mDataSetObservable = new DataSetObservable();

而DataSetObservable繼承自Observable,我們看下DataSetObservable的notifyChanged方法

public class DataSetObservable extends Observable<DataSetObserver> {public void notifyChanged() { synchronized(mObservers) { for (int i = mObservers.size() - 1; i >= 0; i--) { mObservers.get(i).onChanged(); } } } }

可以看到調用了DataSetObserver的onChanged方法,DataSetObserver是一個抽類這里mObservers.get(i)獲得的是其子類AdapterDataSetObserver.

class AdapterDataSetObserver extends DataSetObserver { private Parcelable mInstanceState = null; @Override public void onChanged() { mDataChanged = true; mOldItemCount = mItemCount; mItemCount = getAdapter().getCount(); if (AdapterView.this.getAdapter().hasStableIds() && mInstanceState != null && mOldItemCount == 0 && mItemCount > 0) { AdapterView.this.onRestoreInstanceState(mInstanceState); mInstanceState = null; } else { rememberSyncState(); } checkFocus(); //重新布局 requestLayout(); } ... public void clearSavedState() { mInstanceState = null; } }

可以看到在AdapterDataSetObserver的onChanged方法中調用了requestLayout來進行重新布局。

BroadcastReceiver

在Android中廣播也是基于觀察者模式的

五、小結

觀察者模式優點:

解耦觀察者與被觀察者,應對業務變化 增強系統靈活性、可擴展性

缺點:

在使用時要考慮開發效率和運行效率,程序中包括一個被觀察者、多個觀察者、開發調試等內容會比較復雜,且Java中消息通知默認是順序執行,如果一個觀察者卡頓,那么會影響整體執行效率,在這種情況下一般考慮使用異步的方式。

以上就是詳解Android觀察者模式的使用與優劣的詳細內容,更多關于Android 觀察者模式的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
清纯唯美亚洲综合一区| 亚洲日本欧美| 国产精品亚洲产品| 国产毛片久久久| 国产亚洲字幕| 精品国产欧美| 久久激情网站| 免费日韩精品中文字幕视频在线| 中文字幕日本一区| 欧美日韩一区自拍| 久久精品三级| 色88888久久久久久影院| 狠狠色综合网| 国产美女久久| 久久一区二区三区喷水| 亚洲精品大全| 日韩a一区二区| 午夜日韩福利| 国产日产高清欧美一区二区三区| 国产精品s色| 蜜桃成人av| 久久国产精品免费一区二区三区 | 亚洲免费影院| 日本h片久久| 国产成人免费| 夜久久久久久| 欧美a级一区二区| 国产麻豆久久| 亚洲美女久久| 日韩精品永久网址| 久久大逼视频| 成人亚洲一区二区| 亚洲精品三级| 色黄视频在线观看| 亚洲欧洲日韩| 蜜桃av.网站在线观看| 久久av在线| 麻豆中文一区二区| 蜜臀91精品一区二区三区| 久久精品国产99| 亚洲精品1区| 国产成人久久| 日本aⅴ免费视频一区二区三区| 神马日本精品| 日韩国产高清在线| 久久久精品午夜少妇| 人人爱人人干婷婷丁香亚洲| 五月天久久久| 日本一区二区免费高清| 日韩精品一区二区三区免费视频| 成人久久一区| 欧美激情日韩| 亚洲资源网站| 亚洲午夜久久久久久尤物| 麻豆一区二区99久久久久| 美日韩精品视频| 午夜精品成人av| 乱一区二区av| 日本在线视频一区二区| 欧美va天堂在线| 麻豆一区二区三区| 婷婷综合成人| 蜜桃av一区| 香蕉精品久久| 国产不卡人人| 国产精品久久久久av蜜臀| 亚洲欧美日韩国产综合精品二区 | 国产欧美在线观看免费| 日韩在线一区二区| 精品在线99| 久久久久黄色| 欧美视频精品全部免费观看| 中文日韩在线| 亚洲午夜电影| 精品久久久久久久| 国产精品免费99久久久| 青青国产精品| 日韩高清不卡一区二区| 亚洲无线观看| 在线精品国产亚洲| 久久xxxx| 国产精品毛片一区二区三区| 国户精品久久久久久久久久久不卡| 四虎国产精品免费观看| 国产在线观看91一区二区三区| 国产美女久久| 国产精品视频3p| 国产精品免费精品自在线观看| 欧美日韩a区| 91九色综合| 国产欧美高清| 国产精品探花在线观看| 欧美另类中文字幕| 国产精品伦一区二区| 国产伦理一区| 国产精品v日韩精品v欧美精品网站| 国产欧美一区二区三区米奇| 欧美另类中文字幕| 国产激情欧美| 久久精品国产免费| 激情中国色综合| 久草免费在线视频| 久久精品国产亚洲夜色av网站| 极品日韩av| 欧美~级网站不卡| 亚洲国产日韩欧美在线| 亚洲专区欧美专区| 日韩影片在线观看| 国产精品亚洲产品| 91欧美日韩| 激情五月综合网| 久久亚洲二区| 欧美精品国产一区| 久久精品三级| 亚洲a一区二区三区| 欧美综合国产| 日韩国产欧美一区二区三区| 国产精品99精品一区二区三区∴| 国产不卡精品| 免费看av不卡| japanese国产精品| 免费国产亚洲视频| 国产精品视频一区二区三区综合| 国际精品欧美精品| 亚洲成人一区| 亚洲精品自拍| 久久麻豆视频| 欧美日一区二区| 亚洲欧洲日韩| 福利一区和二区| 日韩亚洲在线| 国产精品三级| 国产91一区| 亚洲精品免费观看| 国产精品大片| 成人久久久久| 日韩av中文字幕一区二区| 人在线成免费视频| 亚洲精品极品| 婷婷综合六月| 欧美亚洲国产日韩| 国精品一区二区| 欧美亚洲人成在线| 神马午夜在线视频| 亚洲精品国产精品粉嫩| 国产中文字幕一区二区三区| 99亚洲精品| 精品三级在线| 丝袜美腿亚洲一区| 精品少妇av| 夜久久久久久| 国产suv精品一区二区四区视频| 先锋亚洲精品| 欧美日韩在线观看首页| 亚洲精品人人| 久久网站免费观看| 国产精品高潮呻吟久久久久| 影院欧美亚洲| 日产精品一区二区| 日韩成人av影视| 国内亚洲精品| 狠狠久久伊人| 日本视频一区二区| 欧美特黄一级大片| 国产精品毛片视频| 免播放器亚洲| av亚洲一区二区三区| 日韩二区三区在线观看| 激情欧美一区二区三区| 久久一区欧美| 97久久中文字幕| 日韩专区欧美专区| av亚洲一区二区三区| 国产精品片aa在线观看| 亚洲欧美不卡| 欧美日韩一二三四| 黑人精品一区| 精品美女在线视频| 日韩福利视频一区| av亚洲在线观看| 亚洲欧洲美洲av| 欧美国产专区| 97精品久久| 日韩欧美中文字幕电影| 久色成人在线| 99视频+国产日韩欧美| 日韩中文字幕高清在线观看| 国产精品v亚洲精品v日韩精品| 亚洲三级毛片| 99在线|亚洲一区二区| 久久久精品网| 中国字幕a在线看韩国电影| 久久影院一区二区三区| 久久国产精品色av免费看| 亚洲视频二区| 美女黄网久久| 男女男精品视频网| 国产精品腿扒开做爽爽爽挤奶网站| 视频一区中文| 99riav1国产精品视频|