转自:http://blog.csdn.net/moruna/article/details/7882381
1、Service介绍
官方解释:A Service
也就是说Service是一个没有提供用户界面而能够提供在后台运行的构件,其他应用能启动一个Service,即使是切换到其他的应用它还能在后台运行。
2、Service的生命周期
AndroidService的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。
3、下面举个播放音乐的例子:
首先在res创建目录raw,然后在里面添加MP3文件
继承一个Service类:
- package
com.Moruna.studys; -
- import
android.app.Service; - import
android.content.Intent; - import
android.media.MediaPlayer; - import
android.os.IBinder; -
- public
class MyService extends Service { -
private MediaPlayer mp; -
-
@Override -
public void onCreate() { -
// TODO Auto-generated method stub -
// 初始化音乐资源 -
try { -
System.out.println("create player"); -
// 创建MediaPlayer对象 -
mp = new MediaPlayer(); -
mp = MediaPlayer.create(MyService.this, R.raw.alarm); -
// mp.prepare(); -
} catch (IllegalStateException e) { -
// TODO Auto-generated catch block -
e.printStackTrace(); -
} -
super.onCreate(); -
} -
-
@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 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; -
} -
- }
在Alarm这个Activity继承类中启动音乐:
- //
播放闹铃 -
Intent intentSV = new Intent(Alarm.this, MyService.class); -
startService(intentSV);
在Alarm这个Activity继承类中关闭音乐:
- //关闭闹铃声
-
Intent intentSV = new Intent(Alarm.this, MyService.class); -
stopService(intentSV);
这样就能实现Service在后台播放所要播放的音乐,当然,在哪里需要启动或关闭音乐看你自己个人需求。
另需要注意一点的是,别忘了注册:
在AndroidManifest.xml中的Application中加入:
- <</span>service
android:name=".MyService" />