我需要的与如何在 Android 中正确升级 AIDL 接口非常相似?问题,但我还希望在安装后启动新版本的 AIDL 服务并停止旧版本。简单地说:我需要最新版本始终是正在运行的版本。(当然,将保持新版本的向后兼容性。)
详细地说,让我们说我们的:
- Android 应用 A 在其代码中包含旧版本的 AIDL 服务(并且在清单中也表示为特殊的远程进程)。
- 应用 B 是用户刚刚安装的具有较新版本 AIDL 服务的应用。
安装应用程序 B 后,我以编程方式终止两个应用程序的进程以及 AIDL 服务的远程进程。在那之后,无论我如何尝试启动新应用程序 B 中包含的 AIDL 服务都没有用,旧版本总是会重新启动(除非我卸载旧应用程序 A)。
有趣的是,如果仅安装了两个应用程序,并且以前从未启动过旧版本的 AIDL 服务,我可以专门针对较新的 AIDL 服务启动(从较新的应用程序绑定到服务)。我的意思是我启动了旧的应用程序 A 并且我能够让它在应用程序 B 中启动新版本的 AIDL 服务。如果旧版本的 AIDL 过去至少运行过一次,那么无论如何(即使在重新启动设备后),它将是 Android 将永远启动的那个!