一、service的概念
今天主要用的用到Android中service来播放音乐,为什么要使用 service来处理呢,经过查阅大量的资料,我发现如果把播放音乐这些操作放在activity里面来操作,很容易就把系统弄的特别卡,同时service并不是新开启了一个线程,如果你想在service里面执行耗时的操作,那就使用IntentService来操作。
二、示例
接下来我们就直接讲整体吧。我们需要播放哪首音乐传递给service,这里同时涉及到了一个activity与service交互的问题,那么他们是怎样交互的呢,交互是这样实现的。通过Intent实现的,通过putExtra来实现。
package com.example.mediaplayer;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
public class MediaService extends Service {
private MediaPlayer mediaPlayer;
private int[] musics={R.raw.a1,R.raw.a2};
//private MediaPlayer fo
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}
@Override
@Deprecated
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
if(mediaPlayer != null){
mediaPlayer.stop();
}
String data = intent.getStringExtra("data");
if(data.equalsIgnoreCase("forward")){
mediaPlayer=MediaPlayer.create(this,musics[0]);
}else if(data.equalsIgnoreCase("left")){
mediaPlayer=MediaPlayer.create(this, musics[1]);
}
if(mediaPlayer != null){
mediaPlayer.start();
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
mediaPlayer.release();
stopSelf();
super.onDestroy();
}
}
我们首先需要覆盖这个方法onStartCommand,他是在service每次调用的时候都要执行的,
onCreate()只会第一次创建service来执行。
<pre name="code" class="java">package com.example.mediaplayer;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button btn1;
private Button btn2;
private Button btn3;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);
btn3 = (Button)findViewById(R.id.button3);
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
intent=new Intent(MainActivity.this,MediaService.class);
intent.putExtra("data","forward");
startService(intent);
}
});
btn2.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
intent=new Intent(MainActivity.this,MediaService.class);
intent.putExtra("data","left");
startService(intent);
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//MediaService.s
this.stopService(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
这里定义了三个按钮,通过不同的参数来实现不同的歌曲播放。
三、总结
service用起来还是比较好用的,希望大家可以相互交流