1

我想了解一些关于服务的基本实用的东西,这些东西在 Android 开发者参考页面中没有明确提到。

  1. 如何从尚未启动的另一个应用程序调用服务?

  2. 如何查询其他应用程序提供了哪些服务?

  3. 是否允许服务使用 UI 方法?(文档说他们专门没有用户界面,但他们的示例中有一个 Toast)

  4. 服务是否可重入?(如果两个应用程序调用相同的服务,它们是否会同时被“服务”而不会弄乱任何局部变量)

  5. 服务是插件的制作方式吗?

  6. 我可以使用服务来扩展我已经安装的应用程序的功能吗?(即我可以“安装”一个服务吗?

  7. 服务能否启动正常活动?他们可以让他们的客户完成吗?


4

1 回答 1

4

如何从尚未启动的另一个应用程序调用服务?

像活动这样的服务是通过使用Intent系统来启动的。您可以使用该startService(intent);方法启动服务。只要将服务正确配置为从其自己的沙箱外部回答意图,这就会跨越应用程序边界。

如何查询其他应用程序提供了哪些服务?

文档。我无法想象在没有文档的情况下您想要询问应用程序以获取其服务的情况,因为您不知道要传递什么才能使服务正确执行。

是否允许服务使用 UI 方法?(文档说他们专门没有用户界面,但他们的示例中有一个 Toast)

服务可以访问应用程序上下文(因此可以发布Toast或启动Activities它们自己的)。他们还可以看到在同一个沙箱中运行的应用程序,这意味着他们可以通过处理程序直接更改正在运行的 Activity 的 UI。然而,就其本质而言Services,即使有可能,它们也并非旨在与 UI 交互。

服务是否可重入?(如果两个应用程序调用相同的服务,它们是否会同时被“服务”而不会弄乱任何局部变量)

可以使用不同的标志启动服务(并且可以进行不同的编程),以允许它们以Intents异步方式接收服务或排队Intents以串行执行。你可以找到更多关于这个(和你的问题的其余部分在这里

服务是插件的制作方式吗?

插件?

我可以使用服务来扩展我已经安装的应用程序的功能吗?(即我可以“安装”一个服务吗?

您可以将服务安装为单独的应用程序,startService()如果它不使用命名的Intent. 但是,此服务将位于不同的沙箱中,并且无法访问正在运行的应用程序的变量/状态。

服务能否启动正常活动?他们可以让他们的客户完成吗?

是的,如果服务在同一个沙箱中运行,他们可以看到与它一起运行的应用程序。它可以使用startActivity(),因为它可以访问应用程序上下文,并且可以调用应用程序内部的静态方法(其中可能包含对 的静态访问Activity)。

于 2012-05-29T09:21:53.123 回答