«

android-service

时间:2024-3-2 17:02     作者:韩俊     分类: Android


service 和线程有什么关系?有什么区别?

1.没关系。service不线程。

Services

A Service is an application component that can perform long-running operations in the background and does not provide a user interface. Another application component can start a service and it will continue to run in the background even if the user switches to another application. Additionally, a component can bind to a service to interact with it and even perform interprocess communication (IPC). For example, a service might handle network transactions, play music, perform file I/O, or interact with a content provider, all from the background.

Service 是一个应用组件。它在后台提供长时间的操作,不提供UI。其他的组件可以开启service,即使切换到其他的应用,service还是会在后台继续运行。此外,一个组件可以绑定一个service来与其交互,甚至可以实现跨进程的通信。例如,一个service可以处理网络事务,播放音乐,执行文件I/O操作,和内容提供者交互,所有这些都是在后台执行的。

A service can essentially take two forms:

Started
A service is "started" when an application component (such as an activity) starts it by calling startService().
Once started, a service can run in the background indefinitely, even if the component that started it is destroyed. Usually, a started service performs a single operation and does not return a result to the caller. For example, it might download or upload
a file over the network. When the operation is done, the service should stop itself.

一个应用组件可以通过startService()开启service。 一旦start,service就在后台无限期的执行,即使组件被销毁。通常,一个开启的service执行单独的操作,不会给调用者返回值。例如,下载或上传文件到网络。当操作结束时,service自动停下来。

Bound
A service is "bound" when an application component binds to it by calling bindService().
A bound service offers a client-server interface that allows components to interact with the service, send requests, get results, and even do so across processes with interprocess communication (IPC). A bound service runs only as long as another application
component is bound to it. Multiple components can bind to the service at once, but when all of them unbind, the service is destroyed.
一个应用组件可以通过 bindService()来绑定service。绑定的service提供一个客户端-服务器的接口,就是说组件作为客户端与service服务器端进行交互。比如
发送请求,得到结果,甚至完成跨进程的通信。一个 bound service只要有一个组件绑定到它,就会运行。一次可以有很多组件绑定到它,当所有组件都解出绑定时,service才被销毁。

Although this documentation generally discusses these two types of services separately, your service can work both ways—it can be started (to run indefinitely) and also allow binding. It's simply a matter of whether you implement a couple callback methods:onStartCommand() to allow components to start it and onBind() to allow binding.

虽然文档通常时区分他们,来谈论这两种service。但是你的service可以同时工作在这两种方式既可以bind 也可以 start。这仅仅是你是否实现这两个回调函数的问题,:onStartCommand() (组件start它) and onBind() (组件bind它).

Regardless of whether your application is started, bound, or both, any application component can use the service (even from a separate application), in the same way that any component can use an activity—by starting it with an Intent. However, you can declare the service as private, in the manifest file, and block access from other applications. This is discussed more in the section about Declaring the service in the manifest.

不管你的应用是started,bound还是包含两者,任何应用组件都可以使用它(即使来自别的应用)。和使用activity一样,使用service也是通过Intent。但是,你也可以在清单文件里声明service是私有的,这会阻止其他应用的访问。

Caution: A service runs in the main thread of its hosting process—the service does not create its own thread and does not run in a separate process (unless you specify otherwise). This means that, if your service is going to do any CPU intensive work or blocking operations (such as MP3 playback or networking), you should create a new thread within the service to do that work. By using a separate thread, you will reduce the risk of Application Not Responding (ANR) errors and the application's main thread can remain dedicated to user interaction with your activities.

注意:service 运行在宿主进程的主线程中,它不会创建自己的进程,不会不运行在独立的进程里(除非你指定)。这就是说,如果你的service执行任何CPU紧张的工作或者阻塞操作,你应该在service里创建新的线程。通过使用新的线程,你可以降低ADR的风险,使你的activities 专注于用户交互。

标签: android

热门推荐