既然service跟Ui线程在同一个线程,那为什么在service播放音乐的时候不会阻塞UI线程呢
难道播放音乐 就不是耗时操作吗? 求解

解决方案 »

  1.   

    还有为什么 在service下载的时候 会是程序使ANR ,而播放音乐不会呢 ? 按理说他们都是耗时操作啊 
      

  2.   

    MediaPlay的start行为并不是阻塞的,播放音乐是放在内部的子线程执行的
    用service下载,你自己没有在service里开子线程下载那么你在主线程执行这个操作自然就阻塞了UI线程了
      

  3.   


    请问你 是怎么知道 start行为 并不是阻塞的  我看源码 也没看出来呀,也没看见它内部开子线程呀还有,
    那我想问   就是关于handler 比如说 handler的是在Ui线程里 
    按程序的的执行方向 从上往下 执行,
    当我们sendmessage 之后 程序就往下执行了,
    handler  它是怎么有机会去处理那些我们 send的message 呢?
      

  4.   


    如果线程只有一个,那么handler sendMessage之后,线程会转向去执行handler的内容,处理完毕后再向下执行。好比一根线拐了个弯回到原点再继续原来的方向。
      

  5.   

    好比你在一个线程里调用两个方法,肯定是第一个方法执行完再去执行第二个方法,你可以把handler里面的处理当做一个方法,而handler.sendMassage();就是执行handler里面的方法