一、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用起來還是比較好用的,希望大家可以相互交流