一、服務()Android中的四大組件之一它可以長期在後臺運行且不提供用戶界面即便用戶到另外一應用程序,服務仍能夠在後臺運行網絡
服務的特色
Service在後臺運行,不用與用戶進行交互
即便程序被切換到後臺,或者用戶打開新的應用,服務仍可運行
服務並不是運行在獨立的進程中,而是依賴於建立服務的應用程序進程。若是某個應用進程被殺掉
在默認狀況下, Service運行在應用程序進程的主線程線程中,若是須要在
Service中處理些網絡鏈接等耗時的操做,那麼應該將這些任務放在 Service的分線程中處理,避免阻塞用戶界面
建立服務ide
自定義類繼承 Service AndroidManifest xm中註冊服務
二、服務的生命週期this
一、 startService方式開啓服務的生命週期線程
服務會執行 onCreate()→onStartCommand(方法,服務處於運行狀態,直到自身調用 stopSelf()方法或者其餘組件調用 stopService方法時服務中止,最終被系統銷燬。component
服務會長期的在後合運行,而且服務的狀態與開啓者的狀態沒有關係。對象
二、 bindService方式開啓服務的生命週期繼承
服務會執行 onCreate()→onBind()方法,服務處於綁定狀態,客戶端經過 unbindService()方法關閉鏈接,解除綁定時,系統將直接銷燬服務。服務與開啓者的狀態有關,當調用者銷燬了,服務也會被銷燬。接口
三、服務端:綁定服務生命週期
//1.構建工ntent對象進程
intentanew Intent(MainActivity, this, Myservice.class):
/調用定方法 onCreate--on8inder-ServiceConncion接口裏的 onServiceConnected
//MyService s=new MyserviceO:
bindservice(intent, conn, Service.BIND_AUTO_CREATE):
建立自定義鏈接類,實現 ServiceConnection接口,重寫接口方法。
class Myserviceconnection implements Serviceconnection
/服務端與服務鏈接成功系統會調用該方法 IBinder service傳遞過來 override
public void onserviceConnected(componentNa name, Ieinder service)
System.out. printIn("onServiceConnected..."):
Myservice. MyIBinder binder= (Myservice MyIBinder) service; binder.testO;
]
/意外中斷鏈接調用該方法解綁不會調用該方法 @override
public void onServiceDisconnected(componentName name){
System. out. printIn("onServiceDisconnect...."):
運行流程
//1.構建工ntent對象
intentanew Intent(MainActivity, this, Myservice.class):
/調用定方法 onCreate--on8inder-ServiceConncion接口裏的 onServiceConnected
//MyService s=new MyserviceO:
bindservice(intent, conn, Service.BIND_AUTO_CREATE):
建立自定義鏈接類,實現 ServiceConnection接口,重寫接口方法。
class Myserviceconnection implements Serviceconnection
/服務端與服務鏈接成功系統會調用該方法 IBinder service傳遞過來 override
public void onserviceConnected(componentNa name, Ieinder service)
System.out. printIn("onServiceConnected..."):
Myservice. MyIBinder binder= (Myservice MyIBinder) service; binder.testO;
]
/意外中斷鏈接調用該方法解綁不會調用該方法 @override
public void onServiceDisconnected(componentName name){
System. out. printIn("onServiceDisconnect...."):
運行流程
四、遠程服務通訊
遠程服務通訊是經過ADL(Android Interface Definition Language實現的,它是一種接口定義語言(nterface Definition Language),其語法格式很是簡單,與Java中定義接口很類似。
定義好AIDL接口以後,接着須要在應用程序中建立 Service的子類該 ServiceonBind的方法所返回的 IBinder對象應該是ADT所生成的 IService.stub的子類
遠程服務
註冊文件配置:Android:process=「:remote」
和主線程分離;
服務銷燬
若是啓動服務:startservice()binservice(intent,com,service。BIND_AUTO-CREATE);同時都使用了,只單擊某一個stopservice,unbinservice中止都不會調用onDestroy()必須這個中止方法都點擊一次