研究报告
建的?那么第
一次启动播放前不需要再调用prepare??了?因为create方法里已经调用过了。
start()是真正启动文件播放的方法?pause()和stop()比较简单?起到暂停和停止
播放的作用?seekTo()是定位方法?可以让播放器从指定的位置开始播放?需要注2006级 张 浩 毕业设计
9 意的是该方法是个异步方法?也就是说该方法返回时并不意味着定位完成?尤其是
播放的网络文件?真正定位完成时会触发OnSeekComplete.onSeekComplete()?如
果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监
听器来处理的。release()可以释放播放器占用的资源?一旦确定不再使用播放器时
应当尽早调用它释放资源。reset()可以使播放器从Error状态中恢复过来?重新会
到Idle状态。
4?设置播放器的监听器?
MediaPlayer提供了一些设置不同监听器的方法来更好地对播放器的工作状态进行
监听?以期及时处理各种情况?如?
setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、
setOnErrorListener(MediaPlayer.OnErrorListener listener)等,设置播放器时
需要考虑到播放器可能出现的情况设置好监听和处理逻辑?以保持播放器的健壮性。
虽然有了这个类对音乐的播放算是解决了?也提供了start、stop、pause等方法。
但是没有像VideoView可以直接设置一个MediaController就可以把控制功能做好。每
一个功能都是自己弄一个按钮添加事件监听器完成。然而这只是个小问题?这个音乐播
放器的最大问题出现在后台播放上面?也就是要用到Service。
这里介绍一下Service工作原理:
Service?看名字就知道跟正常理解的“服务”差不多?后台运行?可交互这样的一
个东西。它跟Activity的级别差不多?但是他不能自己运行?需要通过某一个Activity
或者其他Context对象来调用? Context.startService() 和 Context.bindService()。
两种启动Service的方式有所不同。这里要说明一下的是如果你在Service的onCreate
或者onStart做一些很耗时间的事情?最好在 Service里启动一个线程来完成?因为
Service是跑在主线程中?会影响到你的UI操作或者阻塞主线程中的其他事情。
Service的生命周期?
Service的生命周期方法比Activity少一些?只有onCreate, onStart, onDestroy
我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。
1 通过startService
service会经历 onCreate -> onStart
stopService的时候直接onDestroy
如果是调用者(T
estServiceHolder)自己直接退出而没有调用stopService的话?
Service会一直在后台运行。下次TestServiceHolder再起来可以stopService。
2 通过bindService
Service只会运行onCreate?