项目介绍
项目地址:https://github.com/licheedev/AdPlayer
简单的广告混播实现,没有类似 ViewPager 那样的切换滚动效果。
支持加载 url、本地文件、drawable 和 mipmap(仅图片)、raw 资源、asset 文件。
可以自定义图片加载器。
可以配置图片和视频的缩放模式。
添加依赖
app 的 build.gradle 中添加:
|
|
项目地址:https://github.com/licheedev/AdPlayer
简单的广告混播实现,没有类似 ViewPager 那样的切换滚动效果。
支持加载 url、本地文件、drawable 和 mipmap(仅图片)、raw 资源、asset 文件。
可以自定义图片加载器。
可以配置图片和视频的缩放模式。
app 的 build.gradle 中添加:
|
|
这段时间在一个项目中用到了视频和图片轮播的广告,一开始我使用了 ExoPlayer 视频播放库,结果出现了一个奇葩的问题 ANR on player release #4352,我的设备系统是 Android 5.1.1 于是我尝试工程更新到 AndroidX 将 ExoPlayer
更新到最新版本,结果还是会出问题,貌似在 Android 7.0 中这个问题得到了修复。迫于这个问题的困扰,于是我放弃了 ExoPlayer 而选择系统默认的视频播放库,结果遇到了另一个令人不爽的 bug bug 详细描述。
这个问题在更高的 Android 系统中已经被修复 Fix context leak
最后变相解决 VideoView 在 Activity 中内存泄漏的方法:
创建 AudioServiceActivityLeak.java
类:
|
|
在使用 VideoView 的 Activity 中重写 attachBaseContext
:
|
|
音频播放和视频播放还是有很多本质的区别的,例如视频播放需要和对应的界面(Activity 或者 Fragment)绑定,因为它需要显示内容,而音频播放不需要显示内容,所以通常和对应的 Service 绑定。但是它们也有一些共同的行为抽象和播放过程抽象,也就是说有共同的控制逻辑。
MediaController(媒体控制器)负责隔离界面和媒体播放器,来实现控制隔离。它只会对 UI 暴露部分的控制接口 API 例如播放、暂停等。当 Media Session(媒体会话)的状态发送变化的时候也会通过回调的方式传递到媒体控制器。而媒体会话则负责维护具体的播放逻辑,例如播放,暂停等,它负责和具体的 Player(播放器)之间进行通信。