首页 > 代码库 > 关于Android服务
关于Android服务
Service是Android中四大组件之一,在Android开发中起到非常重要的作用。
通过startService()启动的服务处于“启动的”状态,一旦启动,service就在后台运行,即使启动它的应用组件已经被销毁了。通常started状态的service执行单任务并且不返回任何结果给启动者。比如当下载或上传一个文件,当这项操作完成时,service应该停止它本身。
还有一种“绑定”状态的service,通过调用bindService()来启动,一个绑定的service提供一个允许组件与service交互的接口,可以发送请求、获取返回结果,还可以通过夸进程通信来交互(IPC)。绑定的service只有当应用组件绑定后才能运行,多个组件可以绑定一个service,当调用unbind()方法时,这个service就会被销毁了。
关于Service生命周期:
结合书本上的相关内容,制作了一个简单的音乐播放器,更好地理解服务通信在实际开发中的应用。
service的相关代码如下:
public class MusicService extends Service {
private MediaPlayer mp = new MediaPlayer();
private final IBinder binder = new MyBinder();
public class MyBinder extends Binder {
MusicService getService() {
return MusicService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
private String filepath = Environment.getExternalStorageDirectory() + "/storage/emulated/0/Unknown-Flower.mp3";
public MusicService() {
try {
mp.setDataSource(filepath);
mp.prepare();
} catch (Exception e) {
e.printStackTrace();
}
}
public MediaPlayer getMp() {
return mp;
}
public void play() {
mp.setLooping(true);
if (mp.isPlaying() && mp != null) mp.pause();
else mp.start();
}
public void stop() {
if (mp != null) {
mp.stop();
try {
mp.prepare();
mp.seekTo(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (mp != null) {
mp.stop();
mp.release();
}
}
}
效果如图:
关于Android服务