24.1服務的生命周期
- 與其他組件不同的是,Service不能自己主動運行,需要呼叫相應的方法來啟動,
- 啟動服務的方法是Context.startService()和Context.bindService(),使用不同的方法啟動服務,服務的生命周期也會不同,
1、startService方式開啟服務的生命周期
服務會執行onCreate() ? onStartCommand()方法,服務處于運行狀態,直到自身呼叫stopSelf()方法或者其他組件呼叫stopService()方法時服務停止,最終被系統銷毀,
服務會長期的在后臺運行,并且服務的狀態與開啟者的狀態沒有關系,
2、bindService方式開啟服務的生命周期
服務會執行onCreate() ? onBind()方法,服務處于系結狀態, 客戶端通過unbindService()方法關閉連接,解除系結時,系統將直接銷毀服務,
服務與開啟者的狀態有關,當呼叫者銷毀了,服務也會被銷毀,
①start方式啟動服務
使用startService()方式開啟服務的具體代碼如下所示:
Intent intent = new Intent(this, StartService.class);
Context.startService(intent);
Context.stopService(intent);
服務也是Android中的四大組件之一,因此需要在清單檔案中注冊,
②bind方式啟動服務
當程式使用startService()和stopService()啟動、關閉服務時,服務與呼叫者之間基本不存在太多的關聯,也無法與訪問者進行通信、資料互動等,如果服務需要與呼叫者進行方法呼叫和資料互動時,應該使用bindService()和unbindService()啟動、關閉服務,
- bindService(Intent service,ServiceConnection conn, int flags)
- Intent物件用于指定要啟動的Service
- ServiceConnection物件用于監聽呼叫者與Service的連接狀態,
- flags指定系結時是否自動創建Service(如果Service還未創建),
24.2創建服務
24.2.1 普通模式:
自定義類繼承Service;AndroidManifest.xml中注冊服務
intent=new Intent(MainActivity.this,MyService.class);
startService(intent);
Log.i("service=","服務啟動成功");
24.2.2 系結模式:
構建IBinder物件;自定義IBinder類繼承Binder類;添加自定義方法,
class MyIBinder extends Binder {
//方法:與服務端的資料局傳送,
public MyService test(){
System.out.println("音樂開始播放");
return MyService.this; } }
onBind方法回傳自定義IBinder物件,
服務端:系結服務
//1.構建Intent物件
intent=new Intent(MainActivity.this,MyService.class);
//呼叫系結方法
onCreate->onBinder->回呼是ServiceConncion 介面里的 onServiceConnected
//MyService s=new MyService();
bindService(intent,conn, Service.BIND_AUTO_CREATE);
創建自定義連接類,實作ServiceConnection介面,重寫介面方法,
class MyServiceConnection implements ServiceConnection {
//服務端與服務連接成功系統會呼叫該方法:IBinder service傳遞過來,
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("onServiceConnected....");
MyService.MyIBinder binder= (MyService.MyIBinder) service;
binder.test();
}
//意外中斷連接呼叫該方法;解綁不會呼叫該方法,
@Override
public void onServiceDisconnected(ComponentName name) {
System.out.println("onServiceDisconnected....");
}
}
本地服務通信和遠程服務通信
在Android系統中,服務的通信方式有兩種,一種是本地服務通信,一種是遠程服務通信,
本地服務通信是指應用程式內部的通信,而遠程服務通信是指兩個應用程式之間的通信,使用這兩種方式進行通信時必須滿足一個前提,就是服務必須以系結方式開啟,
1、本地服務通信
2、遠程服務通信
24.3 遠程服務
注冊檔案配置:android:process=":remote"
和主執行緒分離;
24.4 服務銷毀
如果啟動服務:startService(),bindService(intent,conn,Service.BIND_AUTO_CREATE);同時都使用了,只單擊某一個stopService,unbindService停止都不會呼叫onDestroy();必須這個停止方法都點擊一次,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/260277.html
標籤:其他
上一篇:用觀察者模式 手寫一個解耦的在Acticity之間傳遞資訊的方案 借鑒EventBus Android kotlin
下一篇:Tri Tiling·遞推
