我想实现一个在启动时应该像标准系统服务一样运行的服务,这个服务不应该被杀死,并且应该能够在接收来自另一个进程的通知时执行操作。
谁能帮助我创建此类服务的最佳方法(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,您将无法创建不可杀死的免疫服务
您可以为您的服务注册一个带有过滤器的 BroadcastReciever android.intent.action.BOOT_COMPLETED 并在开始调用 startForeground() 之后。这可能不是您真正想要的,但如果您不想创建 ROM,这可能是唯一可以接近的东西。