標籤:android service 資料 二進位 執行個體
Service用處
耗時比較長的功能操作放在後台。(下載,MP3播放)Service是一個應用程式組件Service沒有圖形化介面可以使用Service來更新ContentProvider,發送Intent以及啟動系統的通知等等。Service不是一個單獨的進程,Service不是一個線程。
Service的生命週期onCreat():當Service第一次被建立時,由系統調用。onStartConmmand():是從Android2.0以後的版本開始使用,Service啟動時會由系統自動調用。onDestroy():當Service不再使用時由系統調用。
onStartCommand
Service的進程優先順序Service擁有較高的進程,一般在以下幾種情況下都不會被kill掉。1、如果Service正在調用onCreate、onStart或onDestroy方法,那麼用於當前Service的進程則變為前台進程以避免被killed。2、如果Service已經被啟動,擁有它的進程僅次於可見的進程,而比不可見的進程重要,這就意味著Service一般不會被killed。3、如果用戶端已經串連到Service,那麼擁有它的進程則擁有最高的優先順序,可以認為該Service是可見的,不會被killed。4、如果Service可以使用startForeground(int,Notification)方法來將Service設定為前台狀態,那麼系統就認為是對使用者可見的,並不會在記憶體不足時將它killed。
一、onStartCommand有4種返回值:
START_STICKY:如果service進程被kill掉,保留service的狀態為開始狀態,但不保留遞送的intent對象。隨後系統會嘗試重新建立service,由於服務狀態為開始狀態,所以建立服務後一定會調用onStartCommand(Intent,int,int)方法。如果在此期間沒有任何啟動命令被傳遞到service,那麼參數Intent將為null。
START_NOT_STICKY:“非粘性的”。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統不會自動重啟該服務。
START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統會自動重啟該服務,並將Intent的值傳入。
START_STICKY_COMPATIBILITY:START_STICKY的相容版本,但不保證服務被kill後一定能重啟。
在Activity中綁定Service,讓Activity能夠提供相關資訊的流程
Service類建立
1、繼承Service
2、複寫onBind方法,返回一個綁定的介面給Service。
3、聲明一個內部類來繼承Binder
4、在onBind中將繼承Binder的類給執行個體化。再講對象給返回。
在Manifest中註冊:service
Activity中
綁定按鈕
在OnClick方法中:
執行個體化Intent對象
通過Intent對象引用來設定頁面跳轉:intent.setClass(Context.this,class);
Service與Activity綁定:bindService(intent,conn,flags)
用匿名內部類聲明一個ServiceConnection對象。裡面有onServiceConnected和onServiceDisconnected
Activity與service的綁定,主要通過Binder對象來完成。serivic建立一個Binder,在Activity中獲得binder,就能拿到binder中的方法。
Parcel對象
序列化:將對象轉化成二進位的資料存起來。
Transact與onTransact
如果想要調用onTransact(int code,Parcel data,Parcel reply,int flags),就得先調用Transact(int code,Parcel data,Parcel reply,int flags)。
code:是一個在FIRST_CALL_TRANSACTION和LAST_CALL_TRANSACTION之間的整數。
data:發往service的資料。
reply:返回給Activity的資料。
flags:通常寫成0.
android 中的Service