我感觉sdcard的扫描可以放到子线程中去做,通过handler来控制。不过在service中也是没问题的,它本身就是一个特殊的线程。另外,播放也是在service中进行的,当播放完一首,播放下一首时,需要歌曲的一些信息,例如长度,歌名,歌手,在list中的位置更新到activity中,这又用什么方式比较好呢?
其实这个过程是很快的,因为歌曲的信息就是几个字符串,瞬间就能获取到,不需要特殊处理。你也可以通过handler来做,比如播放完毕了,马上发个消息通知UI更新,当然,你也可以在快播放完的时候加载下一首信息,这样播放完了就马上用这个信息去显示了。

解决方案 »

  1.   

    多谢!
    为了在退出activity时还能继续播放,所以读取播放都放在了service中。
    是不是可以把读取放在activity创建的线程中,只播放的时候传递要播放的曲目在service中播放?
      

  2.   

    只要你确定是否退出了还要继续一直播放,播放所有剩下的列表中的音乐?假如退出了,用户又往sd卡里传mp3了,那理论上应该再去扫描一次sd卡的,但是sd卡是无法监听的。
    所以我觉得完全可以将扫描的操作扔给activity创建时来完成,启动时才扫描sd卡中音乐文件。启动你的应用后又增加的,就不管了。这样就可以如你所说,把读取放在activity创建的线程中,只播放的时候传递要播放的曲目在service中播放了。
      

  3.   

    其实就应该把信息读取和service里的歌曲播放分离开 ,就像你说的这样
      

  4.   

    按返回键,退出activity时还继续播放,即实现后台播放。
    如果是选择菜单中的退出,则完全退出,不再播放。在没有完全退出时,用户再往sd卡里添加文件,只要是读取后再添加的就不管了。
    那就还是读取放在activity中,播放在service中进行。