Android Service 笔记
2010-08-22 04:47:00 来源:WEB开发网Android Service Note
1、 概述
每个服务都继承Service基类。
可以连接到(或者bind to)一个正在运行的服务(如果没有在运行则启动它)。当连接成功后,你可以通过服务提供的接口来与它通信。服务通常产生另外的线程来进行占用时间长的任务。
Service是没有用户可见的界面,不与用户交互,而是在后台运行一段不确定的时间的应用程序组件。每个Service class 都必须在AndroidManifest.xml文件中有相应的< service>声明。Service可以通过 Context.startService()和Context.bindService()来启动。
注意,与其他程序中的对象一样,Service运行他们的主进程中。这意味着,如果服务要进行消耗CPU或者阻塞的操作,它应该产生新的线程,在新线程里进行这些工作。
2、Service 的生命周期
系统有两种启动Service的方法。如果调用Context.startService(),那么系统将会retrieve这个Service(如果必要则创建它并调用它的onCreate()方法),然后使用客户端传递的参数调用它的onStart(Intent,int)方法。这是Service开始运行直到Context.stopService()或者stopSelf()方法被调用。注意,多次调用 Context.startservice()不会嵌套(即使会有相应的onStart()方法被调用),所以无论同一个服务被启动了多少次,一旦调用 Context.stopService()或者stopSelf(),他都会被停止。
客户端也可以使用context.bindservice()来得到一个Service的永久链接。这个方法也会在服务没有运行的条件下创建服务(调用 onCreate()),但是不调用onStart()。客户端会得到服务的onBind(Intent)方法返回的IBinder对象,用来允许客户端回调服务的方法。只要连接已经建立服务会一直运行下去(无论客户端是否保留服务的IBinder对象的引用)。通常返回的IBinder对象是aidl中定义的复杂接口。
A service can be both started and have connections bound to it.这种情况下,系统会为之Service运行只要它被启动或者有一个或者多个对它的使用Context.BIND_AUTO_CREATE flag的链接。一旦没有着这一个的情况发生,Service的哦呢Destroy()会被调用,Service会被有效的结束。所有的 cleanup(停止线程,反注册receiver等)在onDestroy()返回的时候完成。
使用Service的两种方法:
1、It can be started and allowed to run until someone stops it or it stops
赞助商链接