如何在 android 中无限期 运行 共享服务?

How to run a sharable service indefinitely in android?

我想创建一个库,它提供从温度传感器读取值并进行一些处理的服务。该服务将持续监控传感器值,并在检测到高值时发出警报。我想使用这个库构建几个应用程序。我计划将我的库添加为每个应用程序的依赖项,如果一个应用程序已经启动我的服务说 "TemperatureService" 那么其他应用程序应该使用相同的服务而不创建新的服务。

此外,当服务启动时,它应该 运行 无限期。当我将来 运行 一个新应用程序时,它应该能够绑定到当前 运行ning 服务。

我尝试使用 IntentService,但当我终止我的应用程序时,该服务也停止了。

Intent i = new Intent(this.getBaseContext(), MyTestService.class);
i.putExtra("foo", "bar");
startService(i);

我该如何解决我的问题?

为此,您必须使用 Android 接口定义语言和进程间通信 (IPC),详情请遵循 this

您应该使用已启动的服务而不是使用 IntentService 因为 Intent Service 在工作完成后会自行停止。

因此,如果您想 运行 持续提供服务,您需要创建服务,并使用来自 OnServiceConnected() 方法的 return 值 STICKY,即服务 class 中的回调方法。

并且对于跨多个应用程序的通信,您需要实现AIDL 并共享相同的界面来与您的应用程序进行通信。

Android Interface Definition Language (AIDL)

Aidl implementation

Services implemented

IPC in android

Local call implemented

Android Interface Definition Language (AIDL) and Remote Service

上面 link 有完整的演示如何创建和使用服务和 AIDL 进行进程间通信示例使用两个应用程序但您可以创建多个客户端应用程序。