我想了解一些关于服务的基本,实用的内容,这些内容未在Android开发者参考页中明确提及。
如何从另一个尚未启动的应用中调用服务?
如何查询其他应用程序提供的服务?
是否允许服务使用UI方法? (文档说它们特别意味着不向用户提供UI,但是他们的示例中有一个Toast)
服务是否重入? (如果两个应用程序调用相同的服务,它们将同时“服务”而不会弄乱任何本地变量)
服务插件的制作方式是什么?
我可以使用服务扩展已安装应用的功能吗? (即我可以'安装'只是一项服务
答案 0 :(得分:4)
如何从另一个尚未启动的应用程序中调用服务?
通过使用Intent
系统启动活动等服务。您可以使用startService(intent);
方法启动服务。只要服务正确配置为从其自己的沙箱外部回答意图,这就会跨越应用程序边界。
如何查询其他应用程序提供的服务?
文档。我无法想象一种情况,你想要查询应用程序的服务没有文档,因为你不知道要传递什么以使服务正常执行。
是否允许服务使用UI方法? (文档说它们特别意味着不向用户提供UI,但是他们的示例中有一个Toast)
服务可以访问应用程序上下文(因此可以发布Toast
或启动自己的Activities
。他们也可以看到在同一个沙箱中运行的应用程序,这意味着通过处理程序,他们可以直接更改正在运行的Activity的UI。就其本质而言,即使可能,Services
也不会与UI进行交互。
服务是否重入? (如果两个应用程序调用相同的服务,它们将同时“服务”而不会弄乱任何局部变量)
可以使用不同的标志启动服务(并且可以采用不同的方式编程),以允许它们以异步方式为接收的Intents
提供服务,或者将Intents
排队以串行执行。您可以找到有关此问题的更多信息(以及问题的其余部分here)
服务是插件的制作方式吗?
插件?
我可以使用服务扩展已安装应用的功能吗? (即我可以'安装'只是一项服务
您可以将服务安装为单独的应用,如果它没有使用名为startService()
的话,可以捕获正在进行的Intent
次呼叫。但是,此服务将位于不同的沙箱中,并且无法访问正在运行的应用程序的变量/状态。
服务可以启动正常活动吗?他们可以让客户完成吗?
是的,如果服务在同一个沙箱中运行,则可以看到与其一起运行的应用程序。它可以使用startActivity()
,因为它可以访问应用程序上下文,它可以在应用程序内部调用静态方法(可以包含对Activity
的静态访问)。