System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于Android的无感连接Service的方法技术_技高网

一种基于Android的无感连接Service的方法技术

技术编号:40153699 阅读:5 留言:0更新日期:2024-01-26 23:25
本发明专利技术公开了一种基于Android的无感连接Service的方法,引入了动态代理;程序员不再直接持有AIDL代理对象,而是持有动态代理;该动态代理封装了AIDL代理对象和连接器,而且拥有AIDL接口的全部方法。当这些接口方法被调用时,动态代理会先检测与Service的连接是否中断;若未中断就直接调用AIDL代理对象对应的接口方法,若连接中断了,则先用连接器连接Service,连接成功后更新AIDL代理对象,再调用新的AIDL代理对象的接口方法;而这整个过程对程序员来说是无感透明的。从而使得程序员专注于业务开发,从繁琐的Service连接中脱离出来。

【技术实现步骤摘要】

本专利技术涉及基于android的service连接,尤其涉及一种基于android的无感连接service的方法。


技术介绍

1、android操作系统主要用于移动设备,如智能手机和平台电脑等。全世界采用这款系统的设备数量已经达到10亿台。android系统已经成为智能手机领域占有量最高的系统。android应用的开发也随之蓬勃发展。为了节省开发成本,越来越多的软件公司将常用的功能封装成一个sdk应用,以便其它应用通过调用sdk的方式重复利用这些功能。

2、绝大多数的情况下,软件公司会将这些功能封装成service,并提供aidl接口来调用这些功能。所以要使用这些功能就必须先连接上service才行。但是即使连接上了service,service也可能因为自身的异常崩溃或者被android系统杀死,导致连接中断,从而无法继续调用这些功能。

3、常规的解决办法是利用binder的死亡通知机制。客户端连接上服务端的service后注册一个死亡通知,一旦service死亡后,客户端就能收到通知,然后重新连接service,从而激活servie获取到新的aidl接口对象。

4、这种方法有3个不足的地方:

5、1、service死亡后,客户端重新发起连接,但连接本身需要一些时间,在尚未连接成功时,如果客户端恰好调用了aidl接口就会出现异常;

6、2、重新连接成功后,需要重新获取新的aidl接口对象,而不能直接使用原来的aidl对象。这就要求程序员一旦重新连接成功后,必须更新aidl接口对象才能继续调用接口方法;

7、3、常规连接service的方法是异步的,程序员每次开发时都需要手动改成同步的,这样才能保证在连接成功后才去调用aidl接口。

8、这些不足增加了开发的繁琐,因为一个客户端中可能不止要连接一个service,每连接一个service就要疲于应付上面的问题。程序员在开发业务的过程中需要不断处理连接中断的异常情况,程序员希望在调用aidl接口方法时连接都是成功的,可以直接调用aidl接口而不会出现异常。


技术实现思路

1、为解决上述问题,本专利技术提供了一种基于android的无感连接service的方法。

2、为了实现上述的技术目的,本专利技术所采用的技术方案为:

3、一种基于android的无感连接service的方法,包括service助手、连接器、动态代理三个组成部分;

4、所述service助手通过连接器连接服务并生成动态代理返回给开发者;

5、所述连接器用于阻塞式连接service,当连接成功时创建动态代理或更新动态代理中的aidl代理对象;

6、所述动态代理中封装了连接器与aidl代理对象,拥有aidl接口的全部方法;开发者通过动态代理的接口方法间接调用aidl代理对象的方法。

7、进一步的,包括如下步骤:

8、1)开发者调用service助手来获取动态代理,service助手通过连接器连接服务端获取aidl代理对象,再创建一个动态代理,用动态代理封装连接器和aidl代理对象,返回动态代理给开发者;

9、2)开发者调用动态代理的接口方法时,动态代理先使用连接器确保服务连接成功,然后再调用aidl代理对象的对应接口方法。

10、进一步的,所述动态代理是通过java.lang.reflect包提供的proxy类和invocationhandler接口实现的;

11、serviceinvoker类实现了所述invocationhandler接口;

12、所述serviceinvoker中封装连接器、aidl接口的class对象、aidl代理对象;

13、其中,连接器和aidl的class对象在创建serviceinvoker时赋值给serviceinvoker;aidl代理对象在服务连接成功时赋值给serviceinvoker。

14、进一步的,aidl代理对象的创建方式如下:

15、当服务连接成功时,客户端会获取到一个ibinder对象,以ibinder对象为参数,并以反射的方式创建aidl代理对象。

16、进一步的,所述serviceinvoker中包含bind(ibinder service)方法;

17、bind(ibinder service)方法:每当重连服务成功时都会被调用,重新创建aidl代理对象并赋值给serviceinvoker,以替换原来的aidl代理对象。

18、进一步的,步骤2)中开发者调用动态代理的接口方法时,动态代理先使用连接器判断连接是否中断;

19、若连接未中断,则直接调用aidl代理对象的对应接口方法;

20、若连接已中断,则先使用连接器重建连接,并更新aidl代理对象,最后再调用新的aidl代理对象的接口方法。

21、进一步的,步骤2)具体包括:

22、开发者调用动态代理的接口方法时,serviceinvoker先使用连接器的pingservice()方法判断服务是否连接,若已连接则直接调用aidl代理对象对应的接口方法;

23、若未连接则先阻塞式连接,连接成功后触发bind(ibinder service)方法替换aidl代理对象,最后再执行替换后的aidl代理对象的接口方法。

24、进一步的,所述连接器中包含pingservice()方法;

25、所述pingservice()方法用于判断服务是否连接,若已连接则不再连接,直接执行后续步骤,若未连接则发起连接并阻塞当前操作直到连接成功为止。

26、进一步的,所述连接器中还包含getproxy()方法;

27、所述getproxy()方法用于创建并缓存动态代理,更新动态代理中的aidl代理对象;具体方式如下:

28、getproxy()方法接收aidl的class对象和连接成功时的ibinder对象,以class对象为键,判断是否存在对应的动态代理,若不存在,则创建动态代理并加入缓存;若存在则取出缓存中的动态代理;

29、接着取出该动态代理的serviceinvoker,调用该serviceinvoker的bind方法来更新aidl代理对象。

30、进一步的,service助手使用连接器连接服务并生成动态代理返回给开发者,具体方式为:

31、为每一个aidl设置一个getter方法来获取动态代理;所述getter被调用时先执行连接器的pingservice()方法来连接服务,当连接成功后用ibinder对象创建动态代理并返回。

32、程序员在调用sdk的service时经常需要处理连接中断的情况。传统的死亡通知机制是在service发生异常后,重新连接service。但这种办本文档来自技高网...

【技术保护点】

1.一种基于Android的无感连接Service的方法,其特征在于,包括Service助手、连接器、动态代理三个组成部分;

2.根据权利要求1所述的基于Android的无感连接Service的方法,其特征在于,包括如下步骤:

3.根据权利要求2所述的基于Android的无感连接Service的方法,其特征在于,所述动态代理是通过java.lang.reflect包提供的Proxy类和InvocationHandler接口实现的;

4.根据权利要求3所述的基于Android的无感连接Service的方法,其特征在于,AIDL代理对象的创建方式如下:

5.根据权利要求4所述的基于Android的无感连接Service的方法,其特征在于,所述ServiceInvoker中包含bind(IBinder service)方法;

6.根据权利要求5所述的基于Android的无感连接Service的方法,其特征在于,步骤2)中开发者调用动态代理的接口方法时,动态代理先使用连接器判断连接是否中断;

7.根据权利要求6所述的基于Android的无感连接Service的方法,其特征在于,步骤2)具体包括:

8.根据权利要求7所述的基于Android的无感连接Service的方法,其特征在于,所述连接器中包含pingService()方法;

9.根据权利要求7或8所述的基于Android的无感连接Service的方法,其特征在于,所述连接器中还包含getProxy()方法;

10.根据权利要求9所述的基于Android的无感连接Service的方法,其特征在于,Service助手使用连接器连接服务并生成动态代理返回给开发者,具体方式为:

...

【技术特征摘要】

1.一种基于android的无感连接service的方法,其特征在于,包括service助手、连接器、动态代理三个组成部分;

2.根据权利要求1所述的基于android的无感连接service的方法,其特征在于,包括如下步骤:

3.根据权利要求2所述的基于android的无感连接service的方法,其特征在于,所述动态代理是通过java.lang.reflect包提供的proxy类和invocationhandler接口实现的;

4.根据权利要求3所述的基于android的无感连接service的方法,其特征在于,aidl代理对象的创建方式如下:

5.根据权利要求4所述的基于android的无感连接service的方法,其特征在于,所述serviceinvoker中包含bind(ibinder service)方法...

【专利技术属性】
技术研发人员:刘陈硕刘华湘
申请(专利权)人:福建新大陆支付技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1