其他分享
首页 > 其他分享> > 24、绑定服务

24、绑定服务

作者:互联网

服务的生命周期
与其他组件不同的是,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还未创建)。

本地服务通信和远程服务通信
在Android系统中,服务的通信方式有两种,一种是本地服务通信,一种是远程服务通信。

本地服务通信是指应用程序内部的通信,而远程服务通信是指两个应用程序之间的通信。使用这两种方式进行通信时必须满足一个前提,就是服务必须以绑定方式开启。
1、本地服务通信
2、远程服务通信

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…”); } }
运行流程:
3.远程服务
注册文件配置:android:process=":remote"
和主线程分离;
4.服务销毁
如果启动服务:startService(),bindService(intent,conn, Service.BIND_AUTO_CREATE);同时都使
用了,只单击某一个stopService,unbindService停止都不会调用onDestroy();必须这个停止方法都点
击一次。

标签:24,服务,Service,绑定,通信,MyService,方法
来源: https://blog.csdn.net/weixin_45796248/article/details/113774806