-
Notifications
You must be signed in to change notification settings - Fork 437
FAQ
BaseVideoView、WindowVideoView、RelationAssist、AVPlayer用哪个合适?
- BaseVideoView用于最普通的播放,类似于系统的VideoView。
- WindowVideoView用于window模式的播放,VideoView的window形式。
- RelationAssist用于带有无缝切播功能的播放组件,比如列表切全屏、跨页面无缝续播等。
- AVPlayer单纯的解码器,适合用于音乐播放器。
PlayerEvent、ReceiverEvent、ProducerEvent、GroupValue使用场景及使用技巧
- PlayerEvent主要来自解码器的事件,DataProvider的事件也会在其中体现。
- ReceiverEvent均发自BaseReceiver的子类,用户自定义的Cover和Receiver发出的事件均为ReceiverEvent。
- ProducerEvent事件生产者(EventProducer)所发出的事件,比如框架内部的NetworkEventProducer。
- GroupValue一个带监听数据变更的共享数据池,用于Receiver组件间的数据通信。
ReceiverEvent和GroupValue都可用于Receiver之间通信,用哪个合适?
- 通知型事件
只是某个动作或操作触发的临时事件,并不需要记录其状态的,选用ReceiverEvent比较合适。
- 数据型事件
某个配置变更或者数据变化需要通知其他Receiver或外部时,选择GroupValue比较合适。 GroupValue会存储你所放置的数据。
注意: 如果通知时的数据并不需要存储只是一个临时事件,请尽量使用ReceiverEvent。
Receiver中如何获取到播放进度、总时长、缓冲进度?
- 被动获取
被动获取这些数据需要Receiver实现OnTimerUpdateListener接口,框架会自动把数据回调到onTimerUpdate(...)方法中,定时器会每秒回调一次,定时器可随时中断与唤醒。中断时回调即终止,再次唤醒则回调继续。
- 主动获取
在Receiver内部可以调用getPlayerStateGetter()方法获取到PlayerStateGetter,通过PlayerStateGetter可以获取到当前播放进度、总时长以及缓冲进度等信息。
注意: PlayerStateGetter仅在Receiver的bind()生命周期后与unbind()生命周期前生效,所以调用时需要判空处理。
Cover视图放置到容器时的层级如何精细控制?
比如我要确保Error视图是在最上方的,Error出现时所有其他视图均不可见。
类似于这种需求,我们就需要对视图的优先级有精确的区分,Cover被定义了三种层级,Low、Medium、High。
Low在视图的最底层,Medium在中间,High在最上方。
每种层级下均可以指定其具体的优先级,比如LoadingCover和ControllerCover如果都在Low层级下,但是我需要Loading总是在Controller的上方,我们可以对两种Cover分别指定不同的priority进行区分,调用levelLow(int priority)方法并将该方法返回值通过getCoverLevel()返回即可。
priority的值较大就会被放置于上方,较小就会被放置于下方。
如下:
public class LoadingCover extends BaseCover{
//....
public int getCoverLevel(){
return levelLow(2);
}
}
public class ControllerCover extends BaseCover{
//....
public int getCoverLevel(){
return levelLow(0);
}
}
注意: priority的取值范围为0-31