2021-8-4. Eclipse framework之service tracker

本文以eclipse 4.20为参考.

serviceTracker相较于serviceListener更方便使用, 从功能上说, 它实际上是 serviceListener + filter.

指定要跟踪的serviceReference

serviceTracker的构造有3种形式, 可以根据需要选择.

  1. 关注特定serviceReference的serviceEvent.
  2. 关注特定class的一类serviceReferences的serviceEvent.
  3. 直接指定filter, 关注匹配该filter的serviceReferences的serviceEvent.

关于tracked object

tracked object是接口ServiceTrackerCutomizer引入的概念.

public interface ServiceTrackerCustomizer<S, T> {
	public T addingService(ServiceReference<S> reference);
	public void modifiedService(ServiceReference<S> reference, T service);
	public void removedService(ServiceReference<S> reference, T service);
}

ServiceTrackerCutomizer对应了ServiceEvent的几个事件类型. 而addingService()的返回值就是tracked object, 它会回传给modifiedService()和removedService()中. ServiceTracker.Tracked负责保存service object与tracked object的对应关系.

在ServiceTracker的默认实现中, 该tracked object就是service object本身.

open和close

ServiceTracker object需要open()开始跟踪service, close()结束跟踪service.

open()的作用是向serviceRegistry增加filteredServiceListener. filteredServiceListener是带有filter的serviceListener, 当有serviceEvent发布时, filteredServiceListener使用filter过滤, 用匹配的event回调serviceListener(即ServiceTracker.Tracked).

一图胜万言.
在这里插入图片描述

<osgi_serviceTracker.png>

一花一世界 2021/8/4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值