这个bug,是google自带的问题。 和见到的诸多android的疑难问题一样,这又是一个可以归类为 多线程同步/状态机 问题。


问题处在NuPlayer的异步消息的handle中,现象和原因不细说了,被此BUG纠结的头大的,应该一看就明白。

重现步骤:反复进入、退出html5的流媒体播放 (浏览器的UA设成Ipad模式,去如youku网、百度视频中去播视频),会出现卡死情况

卡住的原因,就是刚播放开始的初始化过程中,按了返回键,要返回,NUPlayerDriver 会执行reset操作,并且向NUPlayer 发送reset 消息,收到此消息NUPlayer就向Acodec 发送kwhatflush 消息。由于component当时处于LoadedToIdleState状态, 还没有运行起来,实质上不需要flush decoder,但是ACodec 必须要向NUPlayer回馈kwhatflushcomplete消息,以上整个流程能够顺利走完,否则上层模块在等待flush的回应,会一直等待下去。

解决方法:在ACodec中的baseState中,也加入一个case,向上回个消息就好了(问题很严重,但知道原因后,解决方法都很简单,呵呵,想起那德国工程师划线的故事了没?)

case kWhatFlush:{sp<AMessage> notify = mCodec->mNotify->dup();            notify->setInt32("what", ACodec::kWhatFlushCompleted);            notify->post();            break;}

这个BUG,那天某知名公司的展台上,也看到了,不过他们给的回复是因为我把UA设成IPAD模式造成的,改成android后,会走flash的解码过程,就不会有问题了。呵呵,这是在捣浆糊啊,做产品不能这样唉~


更多相关文章

  1. 在 Android(安卓)上,一个完整的 UDP 通信模块应该是怎样的?
  2. Android(安卓)给应用程序的icon添加未读消息个数提示(红圈内数字)
  3. Android(安卓)APP性能调优 一本正经的胡说八道的前言
  4. Android之旅十七 android中的广播使用
  5. 源码的完全解析:Android的消息机制
  6. Android信息推送技术简要分析
  7. android线程 Handler Message Queue AsyncTask线程模型 线程交互
  8. Android之动态更新通知栏(QQ续四)
  9. Android(安卓)-- Android的广播机制(BroadcastReceiver)

随机推荐

  1. Android(安卓)中 EditText 的 inputType
  2. Android使用百度地图SDK获得当前设备位置
  3. Linux系统Android(安卓)SDK 下载版本,报错
  4. XML-SHAPE
  5. Android系统自带的camera默认使用后置摄
  6. Android(安卓)Studio 第五十三期 - 自定
  7. SafetyNet & 漏洞rootutils 利用
  8. OpenGL,Android注意事项初始化顺序 NullP
  9. 关于标准android中视频播放器中的快进和
  10. Android获取手机信息