在android应用程序里,有一种没有UI的类(android.app.Service)——Service。简单来说,Service是一个 background process(背景程序),通过背景程序,可以实现一些不需要UI的功能,比如播放背景音乐。
下面是一个实现播放背景音乐的例程:
在上个工程的基础上,在Activity中添加音乐播放功能。
在工程中添加一个新类yypService(File->New->Class):
</pre><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a target=_blank class="ViewSource" title="view plain" href="http://blog.csdn.net/imyang2007/article/details/7597040#">view plain</a><a target=_blank class="CopyToClipboard" title="copy" href="http://blog.csdn.net/imyang2007/article/details/7597040#">copy</a><a target=_blank class="PrintSource" title="print" href="http://blog.csdn.net/imyang2007/article/details/7597040#">print</a><a target=_blank class="About" title="?" href="http://blog.csdn.net/imyang2007/article/details/7597040#">?</a></div></div><ol class="dp-j"><li class="alt"><span><span class="keyword">import</span><span> android.app.Service; </span></span></li><li><span></span><span class="keyword">import</span><span> android.content.Intent; </span></li><li class="alt"><span></span><span class="keyword">import</span><span> android.os.IBinder; </span></li><li><span> </span></li><li class="alt"><span></span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> yypService </span><span class="keyword">extends</span><span> Service { </span></li><li><span> </span></li><li class="alt"><span> </span><span class="annotation">@Override</span><span> </span></li><li><span> </span><span class="keyword">public</span><span> IBinder onBind(Intent intent) { </span></li><li class="alt"><span> </span><span class="comment">// TODO Auto-generated method stub </span><span> </span></li><li><span> </span><span class="keyword">return</span><span> </span><span class="keyword">null</span><span>; </span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span>} </span></li></ol></div><pre style="DISPLAY: none" class="java" name="code">import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class yypService extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
yypService 类继承 android.app.Service,几个有关Service 的重要概念如下:
1. Service 对象以 separated process 的方式执行,这表示 Service 与 UI(Activity)并不在同一个 process 里执行,而是各自在不同的 process 执行。
2. Android应用程序是在 Activity 启动与停止 Service。
3. 重载(override)onStart() 方法(method)在 Service 被启动,执行我们想要的背景功能。
4. 重载 onDestroy() 方法在 Service 被停止时,停止执行中的背景功能。
下面是Service的具体实现:
- package com.android;
- import java.io.IOException;
- import android.app.Service;
- import android.content.Intent;
- import android.media.MediaPlayer;
- import android.os.IBinder;
- public class yypService extends Service {
- private MediaPlayer mp;
- @Override
- public void onStart(Intent intent, int startId) {
- // TODO Auto-generated method stub
- // 开始播放音乐
- mp.start();
- // 音乐播放完毕的事件处理
- mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
- public void onCompletion(MediaPlayer mp) {
- // TODO Auto-generated method stub
- // 循环播放
- try {
- mp.start();
- } catch (IllegalStateException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- });
- // 播放音乐时发生错误的事件处理
- mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
- public boolean onError(MediaPlayer mp, int what, int extra) {
- // TODO Auto-generated method stub
- // 释放资源
- try {
- mp.release();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- });
- super.onStart(intent, startId);
- }
- @Override
- public void onCreate() {
- // TODO Auto-generated method stub
- // 初始化音乐资源
- try {
- // 创建MediaPlayer对象
- mp = new MediaPlayer();
- // 将音乐保存在res/raw/xingshu.mp3,R.java中自动生成{public static final int xingshu=0x7f040000;}
- mp = MediaPlayer.create(yypService.this, R.raw.xingshu);
- // 在MediaPlayer取得播放资源与stop()之后要准备PlayBack的状态前一定要使用MediaPlayer.prepeare()
- mp.prepare();
- } catch (IllegalStateException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- super.onCreate();
- }
- @Override
- public void onDestroy() {
- // TODO Auto-generated method stub
- // 服务停止时停止播放音乐并释放资源
- mp.stop();
- mp.release();
- super.onDestroy();
- }
- @Override
- public IBinder onBind(Intent intent) {
- // TODO Auto-generated method stub
- return null;
- }
- }