zoukankan      html  css  js  c++  java
  • Android的BUG(一)

    这个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,向上回个消息就好了(问题很严重,但知道原因后,解决方法都很简单,呵呵,想起那德国工程师划线的故事了没?)

    1. case kWhatFlush:  
    2. {  
    3.     sp<AMessage> notify = mCodec->mNotify->dup();  
    4.                 notify->setInt32("what", ACodec::kWhatFlushCompleted);  
    5.                 notify->post();  
    6.                 break;  
    7. }  

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

  • 相关阅读:
    Windows Phone自学笔记(2)
    对MVC的初步认识
    CMSIS 的相关知识
    关于机器码的一些疑惑
    关于预编译处理的尝试
    IAR提示错误C:\Program Files\IAR Systems\Embedded Workbench 6.4 Kickstart\arm\bin路径下的armjlink.dll文件
    Spring学习笔记(四)
    Spring学习笔记(三)
    Docker容器数据卷(v创建数据卷)
    Spring5学习笔记(一)
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4925073.html
Copyright © 2011-2022 走看看