Android開發07_Service服務


一、前言

Service是Android四大組件之一,多用於服務,像微信這種永遠殺不死的后台進程據說就是用Service做的,此話並不是說Service殺不死,而是每當你啟動了微信,微信的就會在后台啟動兩個Service,一個負責做功能,另一個負責喚醒功能的Service,當你手動去殺微信微信進程時,即使負責功能的Service被殺死了,負責喚醒的Service就會重新喚醒負責功能的Service,所以給我們展示的效果就是微信進程永遠殺不死的神奇現象。

有些碼農可能認為Activity不可以做這些事情嗎?為什么飛到Service來做,這就要牽涉到Service的特點,它和Activity最大的區別就是Activity有界面,二Service沒有,所以它是可以運行於后台的。



二、自定義Service使用

1、自定義Service,繼承Service,當然Service也有自己的生命周期,類似於Activity,因為Service是在后台運行的,所以它的生命周期相對來說沒那么重要,只需理解掌即可。


2、需要在manifests中去注冊,我們說過manifests中可以注冊四大組件的任意一個,有些是必須要注冊的,有些事非必需的,理解記憶

<!-- 注冊Service -->
<service android:name=".MyService" />

3、啟動Service:這里類比Activity的跳轉,Service的啟動也分顯示啟動和隱式啟動

顯示啟動:

Intent intent = new Intent();
intent.setClass(this, MyService.class);
startService(intent);

隱式啟動:

<!-- 注冊Service -->
<service android:name=".MyService">
<action android:name="qd" />
</service>

4、綁定服務:Service的綁定是通過ServiceConnection對象綁定的,由於ServiceConnection本身是個接口類,初始化ServiceConnection對象需要重寫兩個抽象方法:onServiceConnected和onServiceDisConnected,分別在建立連接和斷開連接時調用

/**
* 綁定服務
*/
public void btn03(View v) {

Intent intent = new Intent(this, MyService.class);
bindService(intent, serviceConnection, BIND_AUTO_CREATE);//綁定服務
Log.e("TAL", "1>>>" + myIBinder);
}

/**
* ServiceConnection
*/
public ServiceConnection serviceConnection = new ServiceConnection() {

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//建立連接
myIBinder = (MyService.MyIBinder) service;
Log.e("TAL", "2>>>" + myIBinder);

}

@Override
public void onServiceDisconnected(ComponentName name) {
//斷開連接

}
};

5、在綁定服務成功后,如果想要通過Activity來調取Service類里的方法,需要在Service中新建一個Binder對象,並在Service的OnBind方法中返回此對象,那么在Activity的ServiceConnection中就可以對onServiceConnected的IBinder對象全局賦值並使用了

/**
* 自定義IBinder
* <p>
* # 1 實現IBinder
* <p>
* # 2 繼承Binder
*/
public class MyIBinder extends Binder {

}
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.e("TAL", "onBind");
return new MyIBinder();
}


6、服務也可銷毀

/**
* 關閉服務
*/
public void btn02(View v) {
stopService(new Intent(this, MyService.class));
}

三、總結

1、服務一般用於做不需要界面展示的工作,比如短信攔截、音樂播放器后台播放

2、服務不和Activity同生共死,一般在Activity的finish的方法中調用stopService即可做到在關閉Activity的時候關閉服務



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com