像系统服务一样创建android服务

时间:2012-08-29 15:34:10

标签: android android-service

我想在启动时实现一个应该像标准系统服务一样运行的服务,这个服务不应该是可杀死的,并且应该能够在接收来自另一个进程的通知时执行操作。

任何人都可以帮助我创建此类服务的最佳方法(AIDL),如果有任何示例供参考?

3 个答案:

答案 0 :(得分:1)

除非您正在创建自己的系统ROM,否则无法执行此操作。

如果要创建自己的ROM,可以先修改包含服务的apk的AndroidManifest。您需要向manifest节点添加属性:android:sharedUserId="android.uid.system"。这将导致您的APK保存系统ID(这需要使用您的平台签名密钥签署APK - 这就是您需要创建自己的系统ROM的原因。

这将允许您的应用程序被系统认为是特殊的,并且(至少在4.x上,我没有在较旧的Android版本上测试过)您的应用程序将自动启动。然而,自动启动的应用程序本身并没有多大意义;您需要实现@febinkk建议的BOOT_COMPLETED接收器,或者您可以提供自定义应用程序覆盖(通过将属性android:name="your.package.ApplicationSuperClass"添加到AndroidManifest.xml中的application节点)。在您的应用程序超类中,您可以重载onCreate()并让它启动您的服务或其他任何需要。

此外,作为一个系统应用程序,我相信(虽然尚未经过全面测试),您将无法通过正常方式被杀死。

答案 1 :(得分:0)

如果不创建自己的ROM,则无法创建不可杀戮的免疫服务

答案 2 :(得分:0)

您可以为您的服务注册一个带有过滤器的BroadcastReciever,以及启动调用startForeground()之后的android.intent.action.BOOT_COMPLETED。这可能不是你想要的,但如果你不想创建ROM,这可能是唯一接近的东西。