当前位置:  开发笔记 > Android > 正文

如何在库中为多个应用程序运行单件(共享)服务?

如何解决《如何在库中为多个应用程序运行单件(共享)服务?》经验,为你挑选了1个好方法。

我写了一个在后台启动服务的库.它在所有应用程序中都运行良好

为了减少RAM的使用,我想避免为不同的应用程序运行多个服务.实际上,只使用一种服务来完成任务就足够了.

首先,我编写了一个AIDL文件,用于在应用程序/库之间建立IPC.使用签名权限将服务定义为导出/启用.由于所有应用程序都是完全相同的服务,因此无法检查是否有任何应用程序启动或关闭.绑定服务以检查服务的状态时,由于BIND_AUTO_CREATE标志的性质,它总是创建和销毁自己的服务.这就是为什么不能从导出的服务获得任何类型的信息,如果它真的启动并运行.

然后,我尝试将内容提供程序定义到库的清单中.我的目标是通过它分享服务信息.在导出的服务和应用程序主进程之间进行通信是非常好的机制.但它不适用于多个实例.因为从库中获取内容提供者信息的应用程序使用相同的权限,因此无法安装第二个.它给出了DUPLICATE_PROVIDER_AUTHORITY错误.

你对这个问题有什么建议?有没有选项来创建主/从机制?是否可以使应用程序的服务单例使用库项目?

PS:尝试过广播和共享偏好技术.但是他们无法从导出的服务中收听回调.



1> David Wasser..:

你需要把Service它自己的APK.它需要有自己唯一的包名称(在清单中),这与使用它的任何应用程序的包名称不同.这就是你如何使Service表现为单身人士.现在您可以使用AIDL并绑定到它Service以进行双向通信.

请注意,在Android的更新版本中,有必要开始Service使用显式 Intent(即:Component必须明确指定,不能仅使用ACTION).

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有