作者:我叫柒薇安2001 | 来源:互联网 | 2023-10-10 18:51
Eclipseframework之servicetracker指定要跟踪的serviceReference关于trackedobjectopen和close本文以eclipse4.
Eclipse framework之service tracker 指定要跟踪的serviceReference 关于tracked object open和close
本文以eclipse 4.20为参考.
serviceTracker相较于serviceListener更方便使用, 从功能上说, 它实际上是 serviceListener + filter.
指定要跟踪的serviceReference serviceTracker的构造有3种形式, 可以根据需要选择.
关注特定serviceReference的serviceEvent. 关注特定class的一类serviceReferences的serviceEvent. 直接指定filter, 关注匹配该filter的serviceReferences的serviceEvent. 关于tracked object tracked object是接口ServiceTrackerCutomizer引入的概念.
public interface ServiceTrackerCustomizer {public T addingService(ServiceReference reference);public void modifiedService(ServiceReference reference, T service);public void removedService(ServiceReference 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).
一图胜万言.
一花一世界 2021/8/4