本帖最后由 ploere 于 2013-05-28 19:50:09 编辑

解决方案 »

  1.   

     mMediaPlayer.prepareAsync();这个是干什么的
      

  2.   


    不只是跟prepareAsync这个有关。楼主的问题主要是因为  prepareAsync这个方法运行后,需要一段较长的时间才能会到完成,虽然他是异步的,它不会造成UI阻塞。但是如果在这个方法运行的时候, 再用reset这个方法就会造成UI阻塞,因为这两个方法用了同一把异步锁。。如果把这两个方法都放到线程,也会因为同样的原因,造成时间需要很长。这个问题我也研究了1个多星期,暂时没办法解决。
      

  3.   

    在activity里面做了太多操作,一般mediaplayer都在service里面
      

  4.   


    不只是跟prepareAsync这个有关。楼主的问题主要是因为  prepareAsync这个方法运行后,需要一段较长的时间才能会到完成,虽然他是异步的,它不会造成UI阻塞。但是如果在这个方法运行的时候, 再用reset这个方法就会造成UI阻塞,因为这两个方法用了同一把异步锁。。如果把这两个方法都放到线程,也会因为同样的原因,造成时间需要很长。这个问题我也研究了1个多星期,暂时没办法解决。
    顶一个
      

  5.   

    使用prepareAsync()这个方法有一定的效果。
      

  6.   


    不只是跟prepareAsync这个有关。楼主的问题主要是因为  prepareAsync这个方法运行后,需要一段较长的时间才能会到完成,虽然他是异步的,它不会造成UI阻塞。但是如果在这个方法运行的时候, 再用reset这个方法就会造成UI阻塞,因为这两个方法用了同一把异步锁。。如果把这两个方法都放到线程,也会因为同样的原因,造成时间需要很长。这个问题我也研究了1个多星期,暂时没办法解决。
    顶一个
    现在知道怎么解决的了吗?求方法
      

  7.   

    上层调用应该没有问题,
    一是媒体文件有问题。
    二是Native层的问题。
    三是解码器的问题。
    只有看了 Log 才能分析。
      

  8.   

    ANR的trance LOG 有没有分析下
      

  9.   

    今天刚碰到这问题:设置完网络歌曲,n久没反应,就想下一首,还是没反应,一定要等第一个报错了才能自如操作。百度了n多,没具体说这个的。准备放弃了,最后想到stop有没有用,不报希望的试了下,还真是出乎意料。
    总结:
    问题:setDataSource(url)太长时间没获取到资源,重新播放另一首直接reset()仍要等待报错,用户体验太差。
    解决:调用reset()之前,先调用stop()。