Service在android开发中占据着很大的重要性,因为我们Activity和广播自身的局限性,不能再他们里面进行网络请求,数据请求等耗时耗费资源的操作。所以,这个时候我们就需要用到Service了!
但是具体怎么用呢?我们来做个简单的小Demo!
首先,新建一个Activity,有四个按钮,分别是两个启动服务的按钮,一个播放音乐的按钮,一个暂停音乐的按钮:
public class MainActivity extends Activity {
private Intent intent;
private MyBind myBind;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent = new Intent(this, MyService.class);
}
// 用start方式开启服务的按钮
public void skaiqi(View v) {
startService(intent);
}
// 用bind方式绑定开启服务的按钮
public void sqbind(View v) {
bindService(intent, new MyConnection(), BIND_AUTO_CREATE);
}
// 播放音乐的按钮
public void start(View v) {
myBind.start();
}
// 暂停音乐的按钮
public void pause(View v) {
myBind.pause();
}
// 写一个内部类,实现ServiceConnection,重写两个方法
class MyConnection implements ServiceConnection {
// 与服务连接时调用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBind = (MyBind) service;
}
// 与服务分离时调用
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}
}
下面是新建一个类MyService,继承Service:
public class MyService extends Service {
private MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
System.out.println("onBind");
// 实例化创建的内部类对象,并返回给Activity
return new MyBind();
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
// 在服务创建的时候创建出播放器的对象
mediaPlayer = MediaPlayer.create(this, R.raw.laoren_hai);
System.out.println("oncreate");
}
// 在服务开启的的方法中启动播放音乐
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
mediaPlayer.start();
System.out.println("onStart");
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("onDestroy");
}
// 开始音乐的方法
public void startMusic() {
if (mediaPlayer == null) {
mediaPlayer = MediaPlayer.create(this, R.raw.laoren_hai);
}
mediaPlayer.start();
}
// 暂停音乐的方法
public void pauseMusic() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
}
// 创建一个内部类继承Binder
class MyBind extends Binder {
// 写两个方法,开始音乐的方法和暂停音乐的方法
public void start() {
startMusic();
}
public void pause() {
pauseMusic();
}
}
}
就像这样,当然记得要在androidmanifest.xml中注册服务
到此,服务就建好了,只需要点击开启服务就行了。