起動時に標準のシステム サービスのように実行されるサービスを実装したいと考えています。このサービスは強制終了できず、別のプロセスからの通知を受信したときにアクションを実行できる必要があります。
参照用の例があれば、そのようなサービスを作成するための最良の方法論(AIDL)はどれですか?
起動時に標準のシステム サービスのように実行されるサービスを実装したいと考えています。このサービスは強制終了できず、別のプロセスからの通知を受信したときにアクションを実行できる必要があります。
参照用の例があれば、そのようなサービスを作成するための最良の方法論(AIDL)はどれですか?
独自のシステムROMを作成しない限り、これを行うことはできません。
独自のROMを作成する場合は、サービスを含むapkのAndroidManifestを変更することから始めることができます。ノードに属性を追加する必要がありmanifest
ます:android:sharedUserId="android.uid.system"
。これにより、APKはシステムIDを保持します(APKはプラットフォーム署名キーで署名されている必要があります-これが、独自のシステムROMを作成する必要がある理由です。
これにより、アプリケーションがシステムによって特別であると見なされ、(少なくとも4.xでは、古いAndroidバージョンではテストされていません)アプリケーションが自動起動されます。ただし、自動起動されるアプリケーションは、それ自体ではあまり意味がありません。@febinkkが提案するようにBOOT_COMPLETEDレシーバーを実装する必要があるか、カスタムアプリケーションオーバーライドを提供できます(AndroidManifest.xmlのノードに属性android:name="your.package.ApplicationSuperClass"
を追加することによって)。application
アプリケーションのスーパークラスでは、オーバーロードonCreate()
して、サービスやその他の必要なものを開始させることができます。
さらに、システムアプリケーションとして、(完全にはテストされていませんが)通常の方法では殺されることはないと思います。
独自のROMを作成せずに、殺せない免疫サービスを作成することはできません
サービスの android.intent.action.BOOT_COMPLETED のフィルターを使用して BroadcastReciever を登録し、開始後に startForeground() を呼び出すことができます。これはまさにあなたが探していたものではないかもしれませんが、ROM を作成したくない場合は、おそらくこれが唯一の近道です。