Android 如何启动更新版本的AIDL服务并停止当前正在运行的旧版本

Android 如何启动更新版本的AIDL服务并停止当前正在运行的旧版本,android,process,android-service,aidl,android-binder,Android,Process,Android Service,Aidl,Android Binder,我需要的与问题非常相似,但我还希望在安装AIDL服务后启动新版本的AIDL服务,并停止旧版本的AIDL服务。简单地说:我需要最新版本总是运行的版本。(当然,将保持较新版本的向后兼容性。) 具体来说,我们可以说: Android应用程序A的代码中包含了旧版本的AIDL服务(并且在清单中还声明为一个特殊的远程进程) 应用程序B是用户刚刚安装的具有更新版本的AIDL服务的应用程序 安装应用程序B后,我会通过编程方式终止两个应用程序的进程以及AIDL服务的远程进程。无论我在那一点之后尝试启动包含在较

我需要的与问题非常相似,但我还希望在安装AIDL服务后启动新版本的AIDL服务,并停止旧版本的AIDL服务。简单地说:我需要最新版本总是运行的版本。(当然,将保持较新版本的向后兼容性。)

具体来说,我们可以说:

  • Android应用程序A的代码中包含了旧版本的AIDL服务(并且在清单中还声明为一个特殊的远程进程)
  • 应用程序B是用户刚刚安装的具有更新版本的AIDL服务的应用程序
安装应用程序B后,我会通过编程方式终止两个应用程序的进程以及AIDL服务的远程进程。无论我在那一点之后尝试启动包含在较新应用程序B中的AIDL服务做什么都没有用,较旧的版本总是会重新启动(除非我卸载较旧的应用程序A)


有趣的是,如果两个应用都已安装,并且以前从未启动过旧版本的AIDL服务,我可以专门针对要启动的较新AIDL服务(绑定到较新应用中的服务)。我的意思是,我启动了较旧的应用程序A,并且我能够让它在应用程序B中启动较新版本的AIDL服务。如果较旧版本的AIDL在过去至少运行过一次,那么无论发生什么情况(即使在重新启动设备之后),Android都将始终启动它

你应该考虑收听安装/替换广播……在你的广播接收器中,看看是不是你被替换了,如果是这样的话,就终止你自己。我已经完全在做那件事了。所有进程都会被终止……您所描述的问题(应用程序必须至少启动一次)在Android中是故意的,因为3.x或4.0版本都是如此,对于编写需要从启动开始运行的服务的人来说,这很烦人。我被告知(但未经验证),一旦用户手动启动应用程序,即使在重新启动后,它也可以通过广播接收器自动启动。我想这里的意图是,设备所有者至少应该在他们的平台上运行服务,即使是在用户不知道的情况下安装另一个应用的情况下。不,我的服务不需要从启动开始运行。只要我愿意,我所有的意图都能实现,没有问题。此外,用户是安装所有这些应用程序的人,我没有攻击任何东西。。。问题是,Android可能会在某个地方(例如,在系统缓存文件中…)保存有关它在何处找到此AIDL服务代码的信息。之后,如果我终止了AIDL的进程,并从具有更新版本的应用程序启动AIDL,它将再次启动旧代码。。。