0

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

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

4

3 回答 3

1

除非您正在创建自己的系统 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()并让它启动您的服务或其他任何需要的东西。

另外,作为一个系统应用,我相信(虽然还没有完全测试过)你将无法通过正常的方式被杀死。

于 2012-08-29T15:36:02.837 回答
0

如果不创建自己的 ROM,您将无法创建不可杀死的免疫服务

于 2012-08-29T15:36:30.097 回答
0

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

于 2012-08-29T15:45:35.467 回答