Activityは、さまざまなサービスサービスをどのように取得するか

1469 ワード

1、各activityはContextImpl(ソースコードからactivityを作成したコードからわかる)
2、activityごとにgetSystemService(String name)が呼び出されるのはContextImplのメソッド:getSystemService(String name)
3、ContextImplでSystemServiceRegistryが呼び出された.getSystemService(ContextImpl ctx,String name)
4、SystemServiceRegistryはシステムサービス登録クラスであり、private static final HashMap>SYSTEM_SERVICE_FETCHERS =new HashMap>();ユーザーが利用できるサービスが保存されています.
5、システムはサービスのために1つの享元モードの構築を行って、サービスをすべて静的モジュールで保存します.さらにServiceFetcherを用いて統合処理とパッケージングを行った.
6、ここはコードを貼るのが不便なので、主な過程を口述して説明します.次のように
static {
        registerService(Context.ACCESSIBILITY_SERVICE, AccessibilityManager.class,
                new CachedServiceFetcher() {
            @Override
            public AccessibilityManager createService(ContextImpl ctx) {
                return AccessibilityManager.getInstance(ctx);
            }});
	........

7、ここでCachedServiceFetcherはServiceFetcherというインタフェースを実現した.createServicesメソッドが実装され、このメソッドは、さまざまなサービスとの通信を担当するさまざまなシステムサービスの管理者XXXXXXXmanagerを返します.getService()も実現し、ここで作成したmanagerを返します.
8、静的コードブロックのregisterService方法は、生成したCachedServiceFetcherオブジェクトを我々が先に述べたSYSTEM_に保存することである.SERVICE_FETCHERS中
9、ステップ3でSystemServiceRegistryを呼び出す.getSystemService()メソッドは、SYSTEM_を呼び出すことです.SERVICE_FETCHERSは、対応するnameのServiceFetcherを返し、CachedServiceFetcherのgetService()メソッドを呼び出して対応するmanagerを返します.