android 视频播放器 TextureView , MediaPlayer , SurfaceView 的坑

本文档只针对自己 记录开发的坑。

前段时间写一App 开机启动循环播放一个短视频。

开始使用 SurfaceView  MediaPlayer  播放器视频,问题 写得也很常规


代码如下


其他 onPause onStop  onDestroy 都很常规的写法。

但是事情并没有那么简单。

android 视频播放器 TextureView , MediaPlayer , SurfaceView 的坑_第1张图片

在测试过程中(魅族,魅蓝)


当其他页面跳转到Login的时候发现页面透明了,MediaPlayer 执行正常首页也正常在播放。

因为在 AndroidManifest.xml 并没有涉及到启动模式问题。

所以在跳转页面的时候都是带入启动模式


android:launchMode="standard"
android:launchMode="singleInstance"
android:launchMode="singleTask"
android:launchMode="singleTop"

有一个踢下线的功能在 BaseApplication 中监听踢下线 结果悲剧了

在排除问题过程中 发现 比如 A页面跳转B页面时候带入

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

会清空前面的堆栈

但是A页面会执行

protected void onDestroy()

B比页面跳转C页面同理

但是 在BaseApplication  中全局监听跳转 Login 的时候 (前提登录失效 重新登录本页面数据要刷新不能清空全面的堆栈)

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

 当BaseApplication   跳转到Login 2个都是 singleTop 这个时候Login不会执行

protected void onDestroy()

导致MediaPlayer  ,SurfaceView  不会被清理,当再次被提下线的时候,就出现问题。


在倒腾后所有 TextureView  解决方案 不在黑屏 并且正常播放



重点当存在 启动模式的问题的时候一定需要清空 播放页面的堆栈 再次播放的时候重新创建

android 视频播放器 TextureView , MediaPlayer , SurfaceView 的坑_第2张图片

完美解决:被踢下线后视频无法再次播放,或者播放出现问题的清空, 主要是魅族测试机

企业项目不提供源码。见谅


你可能感兴趣的:(android)