MusicPlayer加载网络音频需要注意的事情

来源:互联网 发布:网络宣传兼职 编辑:程序博客网 时间:2024/06/17 05:46

与加载本地音频不同,加载网络音频需要调用到prepareASync()方法,用于异步加载音频数据。

因此,在使用异步加载时,需要加上onPreparedListener的监听事件。

当onPrepared()被调用时,说明音频的加载完成,可以进行播放。所以常规做法都是在onPrepared()中调用start()方法播放。


这里要注意的是:

1、MediaPlayer的加载超时时间是无法自己设定的,所以要加上onErrorListener,利用TIME_OUT字段判断是否超时,同时因为网络加载会出现很多不同的异常(比如服务器异常、文件异常、网络异常等等)导致加载失败,无法播放音频,所以需要在onError()中针对异常作处理。

2、放任MediaPlayer在主线程中操作很容易导致ANR的出现,而最主要的问题是因为异步加载导致其他操作都会等其onPrepared之后才能继续响应(比如在调用preparedASync()之后立刻stop()、reset()、release()之类的)。所以(1):用Service处理;(2):在Service中还要独立开线程处理

3、由于异步加载导致的部分异常。比如应用关闭了,MediaPlayer突然开始播放,或者在不该播放的地方又控制不住地播放起来。最主要还是prepareAsync()惹的祸,所以(1):确保在不需要调用MediaPlayer时,不会因为后台的网络链接或其他逻辑调用到MediaPlayer,不要在调用了之后再判断是否要关闭MediaPlayer然后再去关闭,这种情况往往特别不靠谱;(2):在onPrepared()中加上相应的判断,不需要播放时直接调用stop()/release()等方法,不轻易调用start()。


其实其他需要异步加载的东西,要注意的点和上面所说的大同小异(比如视频)。

0 0
原创粉丝点击