指紋モジュールプロセス分析(2)指紋フレームワークの初期化プロセス

第二に、指紋フレームワークの初期化プロセス

システムがオンになると、FingerprintServiceを含むさまざまなサービスが開始されます。次の図のブートログ(sys_log.boot)から確認できます。

05-29 10:37:57.870869 1127 1127 I SystemServiceManager:com.android.server.dreams.DreamManagerServiceを開始しています

05-29 10:37:57.874643 1127 1127 SystemServer:StartAssetAtlasService

05-29 10:37:57.883240 1127 1127 I SystemServiceManager:com.android.server.print.PrintManagerServiceを開始しています

05-29 10:37:57.910104 1127 1127 I SystemServiceManager:com.android.server.restrictions.RestrictionsManagerServiceを開始しています

05-29 10:37:57.913926 1127 1127 I SystemServiceManager:com.android.server.media.MediaSessionServiceを開始しています

05-29 10:37:57.926584 1127 1127 I SystemServer:StartMediaRouterService

05-29 10:37:57.939619 1127 1127 I SystemServiceManager:com.android.server.trust.TrustManagerServiceを開始しています

05-29 10:37:57.952689 1127 1127 I SystemServiceManager:com.android.server.fingerprint.FingerprintServiceを開始しています

05-29 10:37:58.866228 1127 1127 V FingerprintService:Fingerprint HAL id:488345235968

05-29 10:37:58.867305 1127 1127 I SystemServer:StartBackgroundDexOptService

 

FingerprintServiceの開始は、SystemServer.JavaのstartOtherServiceメソッドにあります。

/ **

*まだリファクタリングされていないものの雑多なバッグを開始します

*整理されています。

* /

private void startOtherServices(){

   最終的なコンテキストコンテキスト= mSystemContext;

   VibratorService vibrator = null;

   IMountService mountService = null;

   ……

   // FingerprintServiceを開始します

   if(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)){

       mSystemServiceManager.startService(FingerprintService.class);

   }

        ……

ここで開始すると、次に示すように、FingerprintServiceがServiceManagerに追加されます。

 

FingerprintServiceをServiceManagerに追加した後、SystemServiceRegistry.javaの静的コードブロックにサービスを登録するときに、FingerprintServiceオブジェクトをServiceManagerから取得できます。これにより、FingerprintManagerオブジェクトを構築できるため、アプリはContextを介してFingerprintManagerオブジェクトを取得できます。 。さらに、FingerprintServiceのonStart()メソッドもgetFingerprintDaemon()を呼び出して、次の手順を実行します。

//①指紋を取得

//②フィンガープリントでコールバック関数mDaemonCallbackを登録する

//③openhal関数を呼び出してフィンガープリントを取得

パブリックIFingerprintDaemon getFingerprintDaemon(){

             //① GET fingerprintd

            mDaemon = IFingerprintDaemon.Stub.asInterface(ServiceManager.getService(

            FINGERPRINTD));

            mDaemon.asBinder()。linkToDeath(this、0);

            //② フィンガープリントでコールバック関数mDaemonCallback 登録する

            mDaemon.init(mDaemonCallback);

            //③ コールを取得するfingerprintd openhal 機能

            mHalDeviceId = mDaemon.openHal();

            ……

    }

アプリはコンテキストを介してFingerprintManagerを取得し、FingerprintManagerインターフェースを呼び出して対応する機能を実装します。FingerprintManagerは、FingerprintServiceのメソッドを転送します。FingerprintServiceは、登録全体の管理、指紋の識別、削除、およびプロセスのロジックの確認を行います。 FingerprintHalレイヤーと通信します。

31件の元の記事を公開 いいね6 10,000人以上の訪問者

おすすめ

転載: blog.csdn.net/u012824529/article/details/104498285