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

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

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

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


代码如下


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

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


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


当其他页面跳转到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  解决方案 不在黑屏 并且正常播放



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


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

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值