二つの方法サービスのイラスト
我々はすべて知っているように、サービスは、開始するには、2つの方法があります
。
。
。
新しいプロセスにおけるA.スタートサービス
新しいプロセスでは、5つのステップに分けてサービスを開始します。
ステップ1:
アプリはAMSサービスにメッセージを送信し、このようなAIDL透視ルックスから起動します
。図のクライアントが起動するAMN AMP APPによって送ら/サービス情報をAMSに、アプリの終了を表します。
ステップ2:
AMS検査サービスは、マニフェストで宣言され、文は直接エラーではありませんでした。
サービス開始AMS検査プロセスが存在し、そうでない場合は、サービス情報を置く保存され、その後、新しいプロセスを作成しています。
AMSでは、各サービスは、保留にServiceRecordオブジェクトを使用します。
ステップ3:
新しいプロセスが開始された後、新しいActivityThreadを作成し、その後、ActivityThreadはAMSにAMPを渡すことによって、オブジェクト、AMSを告げ、新しいプロセスが正常に起動しました。
ステップ4:
AMS-入力されたActivityThreadは、新しいプロセスを開始したいサービスに情報を送信するために、ATPにより、ATPであるApplicationThreadProxy、オブジェクトに変換します。
STEP5:
ActivityThread及びH、方法のonCreateサービスの実装により、ApplicationThreadを介して受信し、新たなプロセス情報、及び同じ前述の開始アクティビティの最終工程をAMS。一方、サービスコンテキストコンテキストオブジェクトを作成し、サービスに関連しています。
ここでは、開始時にHとHの活動は、新しいプロセスで正常にサービスを開始するには、ここ... Handlerクラスです
。
。
。
II。現在のプロセスでサービス開始
上記のプロセスと比較すると、現在のプロセスでサービスを開始するはるかに簡単です:
AMSへ1.App要求サービス開始
そのようなサービスを宣言するかどうかなど、日常のチェックを、2.AMS、サービスはAMSでここに登録されています。AMSは、サービスは、通知にこのアプリのサービスを開始するサービスアプリを起動することが分かっています。
3 ...サービスが正常に開始されました
。
。
III。現在のプロセスでは、新たに立ち上げたサービスバインディング
AMSサービスへのStep1.APPバインディング要求
そのようなサービスを宣言するかどうかなどStep2.AMSルーチンのチェックは、サービスは、AMSでここに登録されています。AMSは、サービスアプリケーションのサービスアプリケーションへの通知のサービス、バインドを開始することが分かっています。
Step3.App AMSは、サービスを開始し、最初のメッセージを受信しました
Step4.App AMSは、第2のメッセージ、サービスバインディング、およびAMSを通過バインダーを受け
Step5.AMSはバインダーを受け取った後、APPに送ります
Step6.APPは、サービスが正常に起動し、バインダーオブジェクトを受け取りました
ステップ1:
step5,6:
写真は自分自身を塗られ、アドレスは次のとおりです。processon
参考記事:
https://www.jianshu.com/p/058d35e01dd1