WEB开发网
开发学院手机开发Android 开发 Android SDK 开发之 Services 服务 阅读

Android SDK 开发之 Services 服务

 2010-03-23 04:08:00 来源:WEB开发网   
核心提示:ServiceServiceClass Overview 提要Service Lifecycle 服务生命周期Permissions 权限Process Lifecycle 进程生命周期Summary 总结Class Overview 提要服务(Service)是一个在后台运行的组件, 它一直保持运行, 并且不和用户进

Service

Service

Class Overview 提要

Service Lifecycle 服务生命周期

Permissions 权限

Process Lifecycle 进程生命周期

Summary 总结

Class Overview 提要

服务(Service)是一个在后台运行的组件, 它一直保持运行, 并且不和用户进行交互. 每个服务类必须在它所在的包的AndroidManifest.xml中有一个声明. Service使用Context.startService() 和 ontext.bindService()启动.

和其他应用程序对象一样, 服务在主线程中运行. 这意味着如果你的服务想做任何CPU密集型或者阻塞性的操作, 那么最好是创建一个线程来做.

Service 类是应用程序的生命周期中的重要组成部分.

Service Lifecycle 服务生命周期

系统启动服务有两个原因. 如果有人调用Context.startService(), 那么启动会获取该服务(如果需要的话使用onCreate()来创建它)然后调用它的onStartCommand(Intent, int, int)方法, 传入客户提供的参数. 这时候服务会一直运行直到Context.stopService()或者stopSelf()被调用. 注意多个Context.startService()调用不会嵌套(虽然它们会导致多个onStartCommand()调用), 所以无论服务被启动了多少次, 一旦调用Context.stopService()或者stopSelf(), 则服务就会停止. 服务可以使用stopSelf(int)方法来保证启动的intent被处理后才会被停止.

对于启动了的服务, 根据onStartCommand()返回值的不同, 有两种额外的操作模式.

START_STICKY是显式启动和停止的服务使用的, 而START_NOT_STICKY 或者START_REDELIVER_INTENT是只在处理命令时才运行的服务使用的.

START_NOT_STICKY 如果服务进程在它启动后(从onStartCommand()返回后)被kill掉, 并且没有新启动的intent传给他, 那么将服务移出启动状态并且不重新生成, 直到再次显式调用Context.startService().

START_REDELIVER_INTENT 如果服务进程在它启动后(从onStartCommand()返回后)被kill掉, 那么它将会被重启, 并且最后传给它的intent会被重新传给它, 通过onStartCommand(Intent, int, int).

START_STICKY 如果服务进程在它启动后(从onStartCommand()返回后)被kill掉, 那么让他呆在启动状态但不取传给它的intent.

客户也可以使用Context.bindService()来取得和服务的永久性链接. 如果服务没有启动, 那么这将创建它(调用onCreate()),

1 2 3  下一页

Tags:Android SDK 开发

编辑录入:coldstar [复制链接] [打 印]
赞助商链接