一、Service的生命周期(onCreate onStart onDestroy onBind )
1). 被啟動的服務的生命周期:如果一個Service被某個Activity 調用 Context.startService 方法啟動,那么不管是否有Activity使用bindService綁定或unbindService解除綁定到該Service,該Service都在后臺運行。如果一個Service被startService 方法多次啟動,那么onCreate方法只會調用一次,onStart將會被調用多次(對應調用startService的次數),并且系統只會創建Service的一個實例(因此你應該知道只需要一次stopService調用)。該Service將會一直在后臺運行,而不管對應程序的Activity是否在運行,直到被調用stopService,或自身的stopSelf方法。當然如果系統資源不足,android系統也可能結束服務。
2). 被綁定的服務的生命周期:如果一個Service被某個Activity 調用 Context.bindService 方法綁定啟動,不管調用 bindService 調用幾次,onCreate方法都只會調用一次,同時onStart方法始終不會被調用。當連接建立之后,Service將會一直運行,除非調用Context.unbindService 斷開連接或者之前調用bindService 的 Context 不存在了(如Activity被finish的時候),系統將會自動停止Service,對應onDestroy將被調用。
3). 被啟動又被綁定的服務的生命周期:如果一個Service又被啟動又被綁定,則該Service將會一直在后臺運行。并且不管如何調用,onCreate始終只會調用一次,對應startService調用多少次,Service的onStart便會調用多少次。調用unbindService將不會停止Service,而必須調用 stopService 或 Service的 stopSelf 來停止服務。
4). 當服務被停止時清除服務:當一個Service被終止(1、調用stopService;2、調用stopSelf;3、不再有綁定的連接(沒有被啟動))時,onDestroy方法將會被調用,在這里你應當做一些清除工作,如停止在Service中創建并運行的線程。
二、外界與服務通信
在MainActivity里,獲取數據放入intent里,然后啟動服務

在Service里如何獲取MainActivity里的數據呢?由于Service被啟動后,會執行onStartCommand方法,所以我們重寫這個方法,用intent接收數據

三、綁定Service通信(bindSerivce->onCreate->onBind->running->onUnbind->onDestroy)
1)在MainActivity里通過bindService執行綁定
bindService(new Intent(this,MyService.class),this, Context.BIND_AUTO_CREATE);
2)執行這個函數的時候MyService中的onCreate函數執行,然后執onBind函數,重寫該方法。該方法返回了一個iBinder,iBander是一個接口,方法里要返回一個實例,我們需要再寫一個類繼承安卓系統Binder類

3)iBander實例通過MainActivity的bindService的this調用onServiceConnected函數來接收

4)在MainActivity中的binder來調用MyService中setData方法來傳輸數據,完成和service的通信
binder.setData(edt.getText().toString());
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。