当前位置: 首页 > 面试题库 >

Android共享服务?

申屠飞
2023-03-14
问题内容

首先,我想说两件事。首先,很抱歉,如果已经有人问过这个问题,我已经搜索了与此主题相关的类似问题,但找不到解决方案。其次,对于冗长的问题,我们深表歉意,如有任何错误,请通知我,我将确保做出适当的更改:)。

我是Android开发的新手(大约2个月),所以请原谅我的无知。我有关于Android服务的问题。

我的问题如下,我创建了以下3个应用程序:

  • 一个包含小型测试服务( myService )的android库。
  • 可以访问android库的应用程序( TestApplicationOne )。
  • 另一个应用程序( TestApplicationTwo )也可以访问android库。

我当前的解决方案如下, TestApplicationOne* 引用了自定义库,并使用该库通过 bindService() 方法连接到服务(
myService )。连接成功后,应用程序会将自身添加到位于 myService
内的观察者集合中。每当服务需要广播消息时,都会通知此集合中的每个对象。 __

*

运行后,上述解决方案似乎可以正常工作。但是,我现在有另一个应用程序( TestApplicationTwo ),它也想使用与上述应用程序相同的服务。
TestApplicationTwo 的实现是 按照 第一个应用程序( TestApplicationOne
)的相同工作方式/规范创建的。

我的问题是,在任何一个应用程序中启动服务时,其他事件都不会通知到另一个应用程序。

我试图实现几种方法来解决此问题。例如使用Singleton模式保留单个实例,但问题似乎仍然存在。我唯一的理解是,每次启动任一应用程序时,都会创建该库的新实例。因此,在引用的库
TestApplicationOne 是不是同一个实例中引用的库 TestApplicationTwo ,并作为一个结果,而不是被通知。

在这个问题上有没有经验的人?还是可以想到任何可能的解决方案?

预先感谢您的任何帮助,非常感谢。

约翰


问题答案:

我的问题是,在任何一个应用程序中启动服务时,其他事件都不会通知到另一个应用程序。

那是因为您有两项服务。仅仅因为该服务打包在Android库项目中并不能以某种方式神奇地导致两个不同的应用程序使用同一副本。

例如使用Singleton模式保留单个实例,但问题似乎仍然存在。

这两个应用程序都在各自的进程中运行,并具有它们自己的服务私有副本。

我唯一的理解是,每次启动任一应用程序时,都会创建该库的新实例。

图书馆没有实例。Android库项目不是DLL,它们更类似于静态库。

因此,TestApplicationOne中引用的库与TestApplicationTwo中引用的库不是同一实例,因此不会被通知。

更准确地说,服务TestApplicationOne于是服务副本与中的副本TestApplicationTwo

还是可以想到任何可能的解决方案?

没有两个单独的应用程序。

或者,重新设计您的应用程序,以使只有一个拥有该服务,而另一个使用第一个应用程序中的服务。

或者,在两个应用程序的清单中都禁用该服务,并以稳定<intent- filter>格式(例如,使用自定义操作字符串)导出该服务。要安装/运行的第一个应用程序用于PackageManager查看该服务是否存在(例如,它实际上不是第一个应用程序)-看到该服务不存在,它将启用该服务的自己的副本。然后,第二个应用程序经历相同的过程,看到该服务已经存在,并使用远程副本而不是启用自己的副本。

第二个或第三个都不是很容易的,仅仅是因为数据仅存在于一个应用程序中(一个带有服务的应用程序)。因此,如果该应用程序被卸载,则另一个应用程序也将被破坏,即使该应用程序恰好具有可作为禁用组件使用的服务代码。如果应用程序被用户明确描述为具有主要/辅助关系(例如,应用程序及其插件),那么这可能会奏效-
如果应用程序不存在,则用户希望插件不会起作用,例如。当然,在这种情况下,该插件最初不会拥有自己的服务副本,但始终会向主应用程序寻求。



 类似资料:
  • 我试图通过ACTION\u SEND intent与图像共享文本。问题是图像由URL表示,而不是本地URI。我目前拥有的代码是: 现在我已经尝试了一些变体。我尝试了setType(“image/*”),我尝试了从URL解析Uri,我尝试了传递URL字符串本身,等等。到目前为止似乎没有什么工作。但是,当发送到twitter时,我确实看到了文本,而不是图像。 编辑:显然最初的描述不够有帮助,所以...

  • 我有服务课。我需要通过Facebook、whatsapp、gmail、yahoo等分享我的一些细节。但当我尝试分享时,我发现了一个错误 android.util.AndroidRuntimeExcture:从活动上下文外部调用starActive()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗? 下面是我的代码 请给我一个解决方案

  • 我试图理解微服务。我想知道如何解决微服务架构中的一对多/多对多关系问题,以及最佳实践是什么。假设我想将学生课程应用程序转换为学生服务,将课程服务和学生服务对话转换为同一数据库中的学生表和课程服务对话课程表。 示例:学生可以注册许多课程,而且许多课程可以有许多学生(多对多关系)。我有2个微服务1:学生服务2:课程服务 学生服务有学生对象 课程服务具有课程对象 我知道学生服务部必须致电课程服务部才能获

  • 我正在开发一个应用程序,它必须通过whatsapp共享mp3文件。 我现在的代码如下: 例如,我可以通过Gmail成功共享,但通过whatsapp无法实现。这是我的代码的问题还是whatsapp不允许你共享mp3文件? 提前感谢!

  • 我的原始资源中有. mp3、. mp4和. jpg文件。我想与社交应用程序共享这些文件。出于这个原因,我尝试设置文件提供程序,但没有成功。 清单: 路径。xml: 这就是我尝试共享文件的方式(在这种情况下是音频): 对象的返回这样的Uri: 当我运行它时,我要么没有得到任何错误,但意图没有显示,我的活动被重建,要么我得到这个: 我试图从Uri中删除/raw,但我得到了相同的错误: 为什么会发生这种

  • 对于下面的代码,我正在尝试检索共享的首选项,我认为它保存正确,但当我回到登录屏幕时,所有的数据都消失了。我需要它留在我回到这个屏幕上。所以我在个人资料页面上输入姓名、年龄和id到三个单独的行中。然后按下save按钮,然后按下action Bar上的back转到前面的页面。当我回到个人资料页面时,我的信息应该还在那里,但它没有任何帮助?