我想在启动时实现一个应该像标准系统服务一样运行的服务,这个服务不应该是可杀死的,并且应该能够在接收来自另一个进程的通知时执行操作。
任何人都可以帮助我创建此类服务的最佳方法(AIDL),如果有任何示例供参考?
答案 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,这可能是唯一接近的东西。