我有一个库,比如LIB,它公开了很多API和类供应用程序开发人员使用。
如果手机上有多个应用程序使用LIB,我只想创建并运行一个LIB实例。它有点类似于Android平台服务,如LocationManager,SensorManager,PackageManager等。
具体而言,有两个问题需要解决: -
答案 0 :(得分:6)
好的,花了很多时间在这上面,这里是我的问题的答案: -
Q值。如何确保只有一个LIB实例? - 只能通过服务公开LIB功能。
Q值。如何部署LIB(单独的apk /捆绑每个使用它的应用程序,但只有其中一个在任何时间点创建库实例)等。
对于服务,会有一个单独的apk(或者可能与服务客户端应用程序捆绑在一起),
Q值。是否有任何其他方式(除了服务/ AIDL)以确保只有一个LIB实例运行,而不管使用它的应用程序的数量。
是的,就像LIB与每个应用程序捆绑在一起。 但是,这需要在使用意图的库之间建立强大的通信协议,以便其中一个充当主设备,并与其他库共享数据。实际上,只有在没有其他实例运行的情况下,打包在apk中的LIB才会启动它的引擎。实现此目的的一种方法是使用广播并保持安全性,权限可以与所涉及的广播操作相关联。
答案 1 :(得分:0)
使用库项目,您可以静态包含库项目中的类和资源。什么都不会运行,不需要。
这可以增加你的应用程序的大小,但ProGuard等技术可以从最终的.apk中删除未使用的类。
如果您希望您的库独立于其他应用程序运行,那么它确实是一项服务,您应该考虑生命周期应该是什么(例如,应用程序启动,启动时启动等)。
如果你的lib包含要运行的活动,Android操作系统已经处理了这个 - 另一个应用程序只是创建一个意图并调出你的活动。这就是Android的工作原理 - 应用可以使用意图无缝地在彼此之间共享数据和工作流。
如果有服务,那就是同样的事情 - 调用应用程序要么与正在运行的服务交互,要么触发服务启动。
图书馆项目为大多数开发人员处理了很多问题,但如果您有一个非常大的共享代码包,则需要安装为单独的应用程序。
例如,Google地图是一个单独的应用,但其他应用可以触发从该应用加载活动的意图。与可由不同应用程序处理的消息传递和其他活动相同。