首先,我想说两件事.第一个是,对不起,如果已经问过这个问题,我已经围绕这个主题搜索了类似的问题,但无法找到解决方案.其次抱歉这个冗长的问题,请让我知道任何错误,我一定会做出适当的修改:).
我对Android开发相对较新(大约2个月),所以请原谅我的无知.我的问题是关于android服务.
我的问题如下,我创建了以下3个应用程序:
我当前的解决方案如下工作,TestApplicationOne引用自定义库并使用此库通过bindService()方法连接到服务(myService).连接成功后,应用程序将自己添加到位于myService中的观察者集合.每次服务需要广播消息时,都会通知此集合中的每个对象.
跑步时,上述解决方案似乎工作正常.但是,我现在有另一个应用程序(TestApplicationTwo),它也想使用与上面相同的服务.TestApplicationTwo的实现是针对第一个应用程序(TestApplicationOne)的相同工作/规范创建的.
我遇到的问题是,当在任一应用程序中启动服务时,其他应用程序不会收到任何事件的通知.
我试图实现几种方法来解决这个问题.比如使用Singleton模式来保留单个实例,但问题似乎仍然存在.我唯一能理解的是,每次启动应用程序时,都会创建一个新的库实例.因此,在引用的库TestApplicationOne是不是同一个实例中引用的库TestApplicationTwo,并作为一个结果,而不是被通知.
在这个问题上有没有经验的人?或者可以想到任何可能的解决方案?
在任何帮助之前,谢谢你,非常感谢.
约翰
Com*_*are 10
我遇到的问题是,当在任一应用程序中启动服务时,其他应用程序不会收到任何事件的通知.
那是因为你有两项服务.仅仅因为该服务打包在Android库项目中并不会以某种方式神奇地导致两个不同的应用程序使用相同的副本.
比如使用Singleton模式来保留单个实例,但问题似乎仍然存在.
这两个应用程序都在不同的进程中运行,并拥有自己的服务私有副本.
我唯一能理解的是,每次启动应用程序时,都会创建一个新的库实例.
图书馆没有实例.Android库项目不是DLL - 它们更类似于静态库.
因此,TestApplicationOne中引用的库与TestApplicationTwo中引用的库不是同一个实例,因此不会得到通知.
更准确地说,服务TestApplicationOne是来自副本的服务的单独副本TestApplicationTwo.
或者可以想到任何可能的解决方案?
没有两个单独的应用程序.
或者,重新设计您的应用程序,使得只有一个人拥有该服务,而另一个人使用第一个应用程序提供的服务.
或者,在两个应用程序的清单中禁用服务,使用稳定导出<intent-filter>(例如,使用自定义操作字符串).要安装/运行的第一个应用程序用于PackageManager查看服务是否存在(例如,它不是第一个应用程序) - 看到服务不存在,它启用自己的服务副本.然后,第二个应用程序经历相同的过程,看到该服务已经存在,并使用远程副本而不是启用它自己的.
第二个或第三个都不是很容易,因为数据只存在于一个应用程序(具有服务的应用程序)中.因此,如果卸载该应用程序,则另一个应用程序被搞砸,即使它恰好将服务代码作为禁用组件提供.如果应用程序被清楚地描述为用户具有主要/次要关系(例如,应用程序及其插件),那么这可能会有用 - 如果应用程序不存在,用户希望不会期望插件能够正常工作,例如.当然,在这种情况下,插件首先没有自己的服务副本,但总是会寻找主应用程序.