大家晚上好,今天給大家帶來的是四大組件之一服務,上次介紹了全局服務,這次是另外一種十分重要的服務,也就是綁定服務,在很多服務操作中都可以用到。綁定服務是可以通過一些方式來控制服務的開始與結束,和一些方法綁定在一起,實現更加有效的操作,相比於全局服務的,綁定的服務更具體點,區域性高。接下來,我以綁定服務做一個音樂播放器demo來闡述四大組件服務的作用。
步驟一:新建BindMusicService.java繼承Service。
public class BindMusicService extends Service {
//定義音頻播放
private MediaPlayer play;
// 與創建的MyBind相連接
public IBinder onBind(Intent intent) {
//
return new MyBind();
}
@Override
public void onCreate() {
// 找到mp3音頻
play = new MediaPlayer();
//獲取指定的音頻文件
play = MediaPlayer.create(this, R.raw.aa);
super.onCreate();
}
//銷燬,音樂停止
public void onDestroy() {
if (play.isPlaying()) {
play.stop();
}
super.onDestroy();
}
/**
* 創建MyBind繼承Binder,綁定方法
*/
public class MyBind extends Binder {
// 播放音樂
public void startPlay() {
if (!play.isPlaying()) {
play.start();
// 當從其他的文件夾讀音頻就要play.prepare
// play.prepare();
}
}
// 暫停音樂
public void stopPlay() {
if (play.isPlaying()) {
play.stop();
}
}
}
}
2.在mainActivity中書寫關鍵代碼
public class BindActivity extends Activity {
// 定義BindMusicService類的方法,與BindMusicService相連接,MyBind是MusicService的方法
private MyBind mybind;
// 構建ServiceConnection
private ServiceConnection coon = new ServiceConnection() {
// 當調用者與服務連接不成功,則回調該方法, 當連接出現異常會回調該方法,假如調用者自己實現的解綁操作,則不會回調該方法
public void onServiceDisconnected(ComponentName arg0) {
}
/**
* 當調用者與服務連接成功,則回調該方法 ComponentName: 調用者的組件名 IBinder: 實現了IBinder接口的對象
* ,當要綁定的服務成功回調onBind()方法,則表示綁定成功,即onBind的返回值作爲該方法的輸入參數
* 通過該IBinder參數來獲取服務的實例或者是代理對象
實現連接功能
*/
public void onServiceConnected(ComponentName arg0, IBinder ibinder) {
// 綁定服務
mybind = (MyBind) ibinder;
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bind);
}
// 綁定按鈕
public void bind(View v) {
//Intent用來綁定兩個組件
Intent intent = new Intent(this, BindMusicService.class);
// 執行服務service,參數一:意圖Intent ,參數二:服務連接,參數三:內容的格式
//全局服務是startActivity(intent),而綁定服務是bindService(),
bindService(intent, coon, Context.BIND_AUTO_CREATE);
}
// 解綁按鈕
public void unBind(View v) {
// 解綁服務
unbindService(coon);
}
// 播放按鈕
public void startPlay(View v) {
if (mybind != null) {
//調用MusicService方法
mybind.startPlay();
}
}
// 停止按鈕
public void stopPlay(View v) {
if (mybind != null) {
mybind.stopPlay();
}
}
}
注意實現:要在AndroidManifest.xml註冊,因爲服務是四大組件之一,四大組件必須要註冊的。
<service android:name="com.example.demo0823b.service.BindMusicService" />
今天就到這裏,儘管不難理解,但這完完全全解刨service的具體流程,通過這個例子相信大家能學到很多。沒有不達不到的目標,只有不努力的你,晚安。