Adapter的观察者模式
2017-02-09 09:39:14 0 举报
Adapter的观察者模式是一种设计模式,它定义了对象之间的依赖关系,使得当一个对象状态发生改变时,其相关依赖对象都会得到通知并自动更新。在Adapter模式中,通常有一个目标对象和一个适配器对象,适配器对象将目标对象的接口转换成客户端需要的另一种接口,使得原本由于接口不兼容而不能一起工作的那些类可以协同工作。 在观察者模式中,一个对象(被观察者)维护一系列依赖于它的对象(观察者),并在本身状态改变时主动通知所有观察者对象。这种模式可以帮助实现代码的松耦合,提高程序的可扩展性和可维护性。
作者其他创作
大纲/内容
过滤历史弹幕
RecyclerView
RecyclerViewDataObserver mObserverAdapter mAdapter
IBookManager.Stub.Proxy
private IBinder mRemote;
Proxy(IBinder remote)IList<Book> getBookList()android.os.IBinder asBinder()
VideoActivity
override fun onEvent(event: LayerEvent)
通过调用BaseAdapter中的notifyDataSetChanged来间接调用DataSetObservable中的notifyChanged方法
LeBoSearchManager
AdapterDataSetObserver
+ onChanged()+ onInvalidated()
getPageType
1.1 cocosEngineInit()
ScriptEngine
3.3 SendParamsToJS
持有的观察者集合的类型为DataSetObserver
Adapter
AdapterDataObservable mObservable
+ onCreateViewHolder():VH- onBindViewHolder(params)- operation3()
ProjectionListFragment
HistoryDanmuMgr
- mRoomId:String- updateDanmu:Runnable- mHandler: NeuronHandler- mDanmuListener: DanmuUpdateListener
engineInit = false
方法抽象,底层依赖
PlayerLayer
VodPlayerActivity
开启定时器,每分钟请求一次
a.s
BookBinder
AdapterDataObservable mObservable
setAdapter()onBindViewHolder()createViewHolder
native
1.3 判断计时 startTime = 0上报ps = 5
LayerAction
sendLayerEvent(event : LayerEvent)sendManagerEvent(event : LayerEvent)sendLayerAndManagerEvent(event : LayerEvent)onBackPressed(): Boolean { return false }
开启
链接
receive giftSendSuc message
BaseAdapter
+ mDataSetObservable: DataSetObservable- attribute3:type
+ registerDataSetObserver(observer):void+ unregisterDataSetObserver(observer)+ notifyDataSetChanged()
abstract onCreateViewHolder()abstract onBindViewHolder()createViewHolder()notifyDataSetChanged()
2.1 启动定时
AnimationManager
LayerActorImp
4.1 addAnimationTask()
PlayerLayerActivity
DataSetObservable
+ notifyChanged()- notifyInvalidated()
历史弹幕开关
Observable
- mObservers : ArrayList
+ registerObserver():void+ unregisterObserver():void
firstTask = false
PlayerLifecycleCallbacks
ListView
+ mAdapter : ListAdaper
+ setAdapter(ListAdapter):void
10.2.0.65
1.2 判断计时 startTime > 0上报ps = 1
通过DataSetObservable来更新
AdapterDataObservable
notifyChanged()
轮播
StreamCallBack
调用notifyChanged方法后,会遍历所有的观察者并调用观察者的onChanged方法
AsyncTaskManger
List loadLeftTask()List loadFailedTask()retryFaiedTask()stopExecuteTask()restartPausingTask()
3.2 PopTask
UploadControl
excuteUploadTask()getUploadingTask();uploadUploadProgress();
非轮播
IBinder
RemoteProcess
3 播放结束 上报ps = 5
FileUploadTaskDataBase
getAllFinishTask()getUploadingTask();getFailedTask()
CopyOnWriteArrayList<Book> mBookList
IList<Book> getBookList()
AdapterDataObserver
onChanged()
预处理
12.4.9.35
TaskCenterManager
List loadLeftTask(int module)List loadFailedTask(int module)retryFaiedTask()stopExecuteTask()restartPausingTask()
RecyclerView中的Adapter
create BookBinder
Activity
数据库操作保存上一次的任务状态
LeBoManager
Service
a.c
Layer的注册以及消息发送
编译
执行上传任务,回调上传状态
LeBoConnectManager
5.3 clearTaskQueue()
2 将mDataSetObserver注册到被观查者的集合中
LayerActivity
abstract val layoutId: Intprivate var layerManager: LM? = null
2.1 点击投屏触发搜索
3.2 连接成功后请求流地址
无参
2.3 SendParamsToJS
关闭
Client
+ mDataSetObserver:AdapterDataSetObserver+ attribute2:type- attribute3:type
+ setAddapter(adapter)
getBookList()
engine init end
sendData to js
结束
-S
+ onChanged():void+ onItemRangeChanged()+ onItemRangeChanged()+ onItemRangeInserted()+ onItemRangeRemoved()+ onItemRangeRemoved()
被观察者
RtmpBaseActivity
client
弹幕总开关
LayerManager
地址转换
js
abstract
1 乐播sdk初始化
ServiceConnection
FragmentActivity
3 调用notifyDataSetChanged方法,去通知所有的观察者更新
VodBaseActivity
DownloadTaskManger
IBookManager
List<Book> getBookList()
开启定时器,每秒钟过滤一次弹幕
RecyclerView源码分析
内网IP
5.1 onDestroy()
开始
DotManager
Binder
5.2 releaseEngine()
-c
JsMethodDispatcher
在此类的notifyChanged方法中会遍历所有的obsever并调用onChanged方法。
IBookManager.Stub
java.lang.String DESCRIPTORint TRANSACTION_getBookList
Stub()span style=\"font-size: inherit;\
add task to taskQueue
app
ArrayList<T> mObservers
registerObserver()unregisterObserver
adpater中持有一个被观察者,
RtmpPlayerActivity
DataSetObserver
PlayerAction
fun onPlayerStart()fun onPlayerPause()
观察者被注册到被观察者的集合中
ViewHolder
View itemView
定义播放器的行为
ActivityDelegate
RecyclerViewDataObserver
setPageType
IInterface
IBinder asBinder
2.1 msg:engineLoadFinish
PhotoUploadTaskManager
List loadLeftTask()List loadFailedTask()retryFaiedTask()stopExecuteTask()restartPausingTask()registProgressListener()sendProgressUploadMessage()
开始请求历史弹幕
PlayerLayerManager
TaskCenterActivity
a.o
添加到弹幕显示队列中
3.1 点击设备开始连接
实现文 件上传模块具体行为
1 当调用setAdapter时,将RecyclerView持有的观察者注册到Adapter中持有的被观察者中。然后再调用requestLayout方法来更新视图2 当数据变更时,调用adapter的notifyDataSetChanged方法,就会通过adapter中持有的被观察者来通知所有观察者,最终会调用RecyclerView的requestLayout方法来更新视图。3所有更新视图的方法都是通过requestLayout来完成
汇编
engineInit = true
4.2 SendParamsToJS
FileUplaodTaskManager
任务列表: showTaskList = uploadingQueueTaskList + finishTaskList剩余任务: uploadingQueueTaskList.size()
RecyclerViewDataObserver mObserver
setAdapter()requestLayout()
3.1 msg:animationStop
Layer
abstract fun onEvent(event : LayerEvent)
3.4 投屏成功,隐藏设备列表
+ onChanged():void+ onInvalidated():void
Layer行为驱动
+ mObservers:ArrayList
+ registerObserver(params):void+ unregisterObserver(params)+ unregisterAll()
观察者
IPlayer
void start(); void stopPlayback(); void pause(); void seekTo(long msec); long getCurrentPosition(); long getPlayableDuration(); long getDuration();
ServiceConnection serviceConnection
bindService()
ListAdaper
ActivityLifecycleCallbacks
onActivityCreate(savedInstanceState: Bundle?) {} onActivityStart() {} onActivityResume() {} onActivityPause() {} onActivityStop() {} onActivitySaveInstanceState(outState: Bundle?) {}onActivityDestroy() {}
2.2 更新设备列表数据
2.3 上报心跳跳 ps = 2
创建RecyclerView
engine init start
SCCastManager
1.1 通知已经获取流数据
a.i
【engineLoadFinish = true &&IDLE = false】
直播类型
taskQueue.size > 0 sendData to js
显示状态与触发行为
在setAdapter中初始化Adapter并将观察者(AdapterDataSetObserver)注册到被观察者(DataSetObservable)
汇编文件
2.2 60s回调一每隔次
3.3 流地址请求成功直接发起投屏
Activity生命周期回调
预处理文件
+ mDataSetObservable:DataSetObservable
+ notifyDataSetChanged():void
-E
创建Adapter
1.2 ConstructAndAddTask
1 在setAdapter方法中创建一个观察者AdapterDataSetObserver,2 BaseAdapter中维护了一个被观察者的对象,在setAdapter方法中,将创建好的观察者注册到此被观察者的集合中。3一旦调用BaseAdapter中的notifyDataSetChanged方法时,将会通过BaseAdapter中维护的被观察者对象去遍历所有的观察者,并调用观察者的onChanged方法
TimerTaskManager
List bookList
firstTask = true
+ notifyChanged():void
2.2 PopTask
目标文件
PlayStatus
播放器生命周期回调
1 创建观察者mDataSetObserver
MainProcess
公网IP
Binder mBinder
IBinder onBind(Intent intent)
bindServie()
+ registerDataSetObserver(DataSetObserver):void
房间信息请求成功并且满足弹幕总开关为开启状态历史弹幕开关我开启状态
0 条评论
下一页