android Services

来源:互联网 发布:海森堡测不准原理 知乎 编辑:程序博客网 时间:2024/06/05 00:53

Services

此服务是可以在后台执行长时间运行的操作,并且不提供用户界面的应用程序组件。另一个应用程序组件可以启动一个服务,它会继续在即使用户切换到另一个应用程序在后台运行。此外,一个组件可以绑定到一个服务来与它进行交互,甚至进行进程间通信(IPC)。例如,一个服务可以处理网络交易,播放音乐,执行文件I / O,或者与内容提供商进行互动,所有的背景。服务基本上可以采取两种形式:

入门 
服务的“启动”当一个应用程序组件(如活动)通过调用startService启动它()。一旦开始,一个服务可以在后台运行下去,即使启动它的成分被破坏。通常情况下,启动服务执行一个操作,因此不会返回给调用者。例如,它可能会下载或上传文件在网络上。当操作完成时,服务应该停止本身。

绑定 
服务是“必然”当一个应用程序组件绑定到它通过调用bindService()。绑定的服务提供了客户端 - 服务器的接口,允许组件与服务交互,发送请求,得到的结果,甚至为此与跨进程间通信(IPC)的过程。绑定的服务仅运行,只要其他应用程序组件绑定到它。多个组件可以绑定到服务一次,但是,当它们全部解除,该服务被破坏。

虽然此文件通常分别讨论这两种类型的服务,你的服务可以是双向的,它可以启动(无限运行),也允许绑定。它只是你是否实现了几个回调方法的问题:onStartCommand(),以允许组件启动和onBind()允许绑定。

无论您的应用程序启动时,约束,或两者兼而有之,任何应用程序组件可以使用的服务(甚至从一个单独的应用程序),以同样的方式,任何组件都可以通过活动,有一个Intent启动它使用。不过,你可以声明该服务为私有,在清单文件,并阻止其他应用程序的访问。这是有关在清单中声明该服务的一节讨论。

注意:一个服务运行在不创建自己的线程的托管过程中,服务的主线程,不会在一个单独的进程中运行(除非另行指定)。这意味着,如果你的服务是打算做任何CPU密集型的工作或阻塞操作(如播放MP3或网络),你应该创建一个新的线程,在服务中做的工作。通过使用一个单独的线程,你会降低应用程序的风险不响应(ANR)错误和应用程序的主线程可以继续专注于用户交互与活动。
0 0
原创粉丝点击