2

新しいシステムサービスを開発するとき、私はそれを正しい方法で行うようにしたいと考えています。たとえば、MySystemManagerService という新しい SystemService があるとします。MySystemManager を作成する必要がありますか。(PackageManager と PackageManagerService、ActivityManager と ActivityManagerService に似ています)。

Manager と ManagerService の組み合わせによって何が達成されているのか知りたいのですが、サービスだけを使用して同じことを達成できないでしょうか。

これについての考えは、私にとって非常に役立ちます。

4

1 に答える 1

3

システム サービスを処理する従来の方法は、Manager と ManagerService を使用することです。これは、ユーザーが利用できるようにするすべての機能が Manager によってカプセル化されているためです。PackageManager と ActivityManager はこれの良い例ですが、範囲が広いです。小規模な例として、DevicePolicyManagerDevicePolicyManagerServiceを見てみましょう。

Manager は、醜い try catch ステートメントをラップして見た目を少し良くする以外は、実際には何もしていないことがわかります。また、開発者に公開されるすべての機能を適切にラップしています。基本的に、マネージャーから得られるのはこれだけです。

Manager が (サービス内で) 呼び出すメソッドを見ると、このenforceCrossUserPermission(userhandle)メソッドが表示されます。サービス自体が許可チェックを行っています。開発者は、スタブを介して手動でサービスのハンドルを取得できますが、セキュリティ チェックを実行している場合、サービスが提供するメソッドを使用することはできません。

このようにサービスを充実させ、多くの機能をシステムに提供できますが、サービスの一部をユーザーに公開することもできます。任意のユーザーに使用させたくないメソッドに対してセキュリティ チェックを実行する限り、その機能は厳密にシステムの一部のままです。

要約すると、MOD のパブリック SDK を公開することを計画している場合は、ユーザーの生活を楽にするパターンに従う必要があります。ただし、システムにサービスを提供するだけの場合は、上記でリンクしたのと同じ方法でいくつかの権限チェックを行い、機能をシステムに対してローカルに保つことができます。

セキュリティ チェックを実行しない機能は基本的にユーザーに公開され、ユーザーが望む方法で使用できることを覚えておいてください。

于 2014-03-31T14:19:39.953 に答える