我写了一个在后台启动服务的库.它在所有应用程序中都运行良好
为了减少RAM的使用,我想避免为不同的应用程序运行多个服务.实际上,只使用一种服务来完成任务就足够了.
首先,我编写了一个AIDL文件,用于在应用程序/库之间建立IPC.使用签名权限将服务定义为导出/启用.由于所有应用程序都是完全相同的服务,因此无法检查是否有任何应用程序启动或关闭.绑定服务以检查服务的状态时,由于BIND_AUTO_CREATE标志的性质,它总是创建和销毁自己的服务.这就是为什么不能从导出的服务获得任何类型的信息,如果它真的启动并运行.
然后,我尝试将内容提供程序定义到库的清单中.我的目标是通过它分享服务信息.在导出的服务和应用程序主进程之间进行通信是非常好的机制.但它不适用于多个实例.因为从库中获取内容提供者信息的应用程序使用相同的权限,因此无法安装第二个.它给出了DUPLICATE_PROVIDER_AUTHORITY错误.
你对这个问题有什么建议?有没有选项来创建主/从机制?是否可以使应用程序的服务单例使用库项目?
PS:尝试过广播和共享偏好技术.但是他们无法从导出的服务中收听回调.
你需要把Service
它自己的APK.它需要有自己唯一的包名称(在清单中),这与使用它的任何应用程序的包名称不同.这就是你如何使Service
表现为单身人士.现在您可以使用AIDL并绑定到它Service
以进行双向通信.
请注意,在Android的更新版本中,有必要开始Service
使用显式 Intent
(即:Component
必须明确指定,不能仅使用ACTION).