2010年12月15日水曜日

5.2.4 ServiceRegistration オブジェクトの早期必要性 (Early Need for ServiceRegistration Object)

サービスオブジェクトの登録により, 登録されている全ての ServiceListener オブジェクトに対して通知がおこなわれる. この通知は同期である. これが意味することは, リスナーは, registerService メソッドが ServiceRegistration オブジェクトを返却する前に, サービスにアクセスでき, そのメソッドを呼ぶことができるということである. 状況によっては, そのようなコールバックの中で ServiceRegistration オブジェクトにアクセスする必要がある場合がある. しかし, 登録をおこなうバンドルはその時点で ServiceRegistration オブジェクトをまだ受け取ってない. 127 ページの 図 5.32 はこのシーケンスを示している.

The registration of a service object will cause all registered ServiceListener objects to be notified. This is a synchronous notification. This means that such a listener can get access to the service and call its methods before the registerService method has returned the ServiceRegistration object. In certain cases, access to the ServiceRegistration object is necessary in such a callback. However, the registering bundle has not yet received the ServiceRegistration object. Figure 5.32 on page 127 shows such a sequence.

[図 5.32 ServiceRegistration と登録]

[Figure 5.32 Service Registration and registration]

上記のようなケースでは, ServiceFactory オブジェクト経由で登録オブジェクトへアクセスすることができる. ServiceFactory オブジェクトが登録された場合, フレームワークは, 登録をおこなうバンドルを, ServiceFactory メソッド getService(Bundle,ServiceRegistration) で呼ばなければならない. このメソッドには, 要求された ServiceRegistration オブジェクトがパラメーターとして渡される.

In a case as described previously, access to the registration object can be obtained via a ServiceFactory object. If a ServiceFactory object is registered, the Framework must call-back the registering bundle with the ServiceFactory method getService(Bundle,ServiceRegistration). The required ServiceRegistration object is passed as a parameter to this method.