我感觉sdcard的扫描可以放到子线程中去做,通过handler来控制。不过在service中也是没问题的,它本身就是一个特殊的线程。另外,播放也是在service中进行的,当播放完一首,播放下一首时,需要歌曲的一些信息,例如长度,歌名,歌手,在list中的位置更新到activity中,这又用什么方式比较好呢?
其实这个过程是很快的,因为歌曲的信息就是几个字符串,瞬间就能获取到,不需要特殊处理。你也可以通过handler来做,比如播放完毕了,马上发个消息通知UI更新,当然,你也可以在快播放完的时候加载下一首信息,这样播放完了就马上用这个信息去显示了。
其实这个过程是很快的,因为歌曲的信息就是几个字符串,瞬间就能获取到,不需要特殊处理。你也可以通过handler来做,比如播放完毕了,马上发个消息通知UI更新,当然,你也可以在快播放完的时候加载下一首信息,这样播放完了就马上用这个信息去显示了。
为了在退出activity时还能继续播放,所以读取播放都放在了service中。
是不是可以把读取放在activity创建的线程中,只播放的时候传递要播放的曲目在service中播放?
所以我觉得完全可以将扫描的操作扔给activity创建时来完成,启动时才扫描sd卡中音乐文件。启动你的应用后又增加的,就不管了。这样就可以如你所说,把读取放在activity创建的线程中,只播放的时候传递要播放的曲目在service中播放了。
如果是选择菜单中的退出,则完全退出,不再播放。在没有完全退出时,用户再往sd卡里添加文件,只要是读取后再添加的就不管了。
那就还是读取放在activity中,播放在service中进行。