
【木棉花】:Service核心技术精要直播之学习笔记(下) 原创 精华
前言
这篇文章是我观看张荣超老师8月12日Service核心技术精要的直播后的学习笔记,温故而知新,跟着敲代码,跟着学知识,冲冲冲O(∩_∩)O
概述
这是直播的主要内容,本文是对连接和断开连接应用内的Service和跨设备连接和断开连接应用内的Service两个Demo做点笔记记录
正文
一、知识要点
1、连接Service:如果Service需要与Page Ability或其他应用的Service Ability进行交互,则须创建用于连接的Connection。Service支持其他Ability通过connectAbility()方法与其进行连接。
在使用connectAbility() 处理回调时,需要传入目标Service的Intent与IAbilityConnection的实例。IAbilityConnection提供了两个方法供开发者实现:onAbilityConnectDone() 是用来处理连接Service成功的回调,onAbilityDisconnectDone() 是用来处理Service异常死亡的回调。同时,Service侧也需要在onConnect() 时返回IRemoteObject,从而定义与Service进行通信的接口。onConnect()需要返回一个IRemoteObject对象,HarmonyOS提供了IRemoteObject的默认实现,用户可以通过继承LocalRemoteObject来创建自定义的实现类
二、连接和断开连接应用内的Service
1.界面布局
![]() |
![]() |
---|
/ability_main.xml/
/ability_second.xml/
2.ServiceAbility
设置一下打印日志的内容,定义一个内部类,定义一个方法plus作为Service调用的方法;在连接Service调用onConnect时返回这个内部类的一个实例对象
3.AbilitySlice
onAbilityConnectDone中的形参为iRemoteObject,要将其转化为它实际的类型,系统为这个形参传入的实参是Service中的onConnect返回的实例对象。
当本应用调用方法connectAbility的时候,就会根据指定的intent对象和AbilityConnection去连接Service,如果Service没有被其他Ability连接,那么系统就会先创建Service,并且回调onStart来初始化Service,然后再回调onConnect连接Service;如果已经连接到其他Ability,那么系统会直接回调onAbilityConnectDone。只有当所有Ability都与Service断开连接了,系统才与Service断开连接。
创建一个SecondAbility,如果跳转页面不成功可以去看看配置文件config.json是否配置了SecondAbility的相关信息
/MainAbilitySlice/
/SecondAbilitySlice/
打印的日志如下
三、跨设备连接和断开连接应用内的Service
代码内容跟跨设备启动和停止Service差不多,要配置相关权限,发送弹窗形式请求用户授权,再定义一个工具类去获取所有设备的Id列表… …
要点:1.本地设备连接和断开连接应用内的Service中的ServiceAbility的内部类是继承LocalRemoteObject,而跨设备的是继承RemoteAbilityStub。
2.RemoteAbilityStub这个类来自idl,idl:当跨进程进行通信的时候,它可以用于定义客户端和服务端两者共同认可的接口,创建idl文件,定义好接口后,打开Gradle,找到对应模块下的下图的位置compileDebugIdl双击,系统会自动生成三个文件,一个是接口文件,一个是客户端的代理类,一个是服务端的装类.
结语
以上就是我这次的小分享啦❀❀!!2022,学习路上继续前进!
更多资料请关注我们的项目 : Awesome-Harmony_木棉花
