Android SDK 开发之 Services 服务
2010-03-23 04:08:00 来源:WEB开发网一个服务同时可以被启动并连接. 在这样的情形下, 系统将让该服务保持运行,只要它是启动状态,或者有Context.BIND_AUTO_CREATE标志的连接. 当这两个条件都不满足时, 该服务的onDestroy()方法被调用, 服务被终止. 所有的清理工作(停止线程, 注销接收器)应该在onDestroy()中完成.
Permissions 权限
如果一个服务在manifest中的中声明一个服务的强制全局访问, 那么其它的应用程序必须在对应的元素中做相应的声明, 以便启动,停止或者绑定该服务.
此外, 一个服务可以使用权限来保护一个IPC调用. 使用 checkCallingPermission(String) 方法.
Process Lifecycle 进程生命周期
android系统会试图保持持有服务的进程运行, 只要该服务被启动或者有客户连接它. 当内存不足时, 持有服务的进程将有较高的优先级:
如果服务正在它的 onCreate(), onStartCommand()或者onDestroy()中运行, 那么持有服务的进程将变为前台进程.
如果服务已经被启动了, 那么持有它的进程被认为比当前对用户可见的进程次要, 但比其它不可见的进程重要.
如果有客户连接到服务, 那么该服务的进程的重要性不低于重要性最高的客户进程.
一个已启动的服务可以诗意哦能够startForeground(int, Notification) API来将服务放在前台状态, 系统认为它是用户可见的, 因此在内存低的时候不会被kill.
注意这意味着大部分服务在运行的时候, 它有可能被系统Kill掉. 这样, 系统之后会重启该服务. 如果你实现onStartCommand()来安排异步工作或者在另一个线程中工作, 那么你可能需要使用START_FLAG_REDELIVERY来让系统重新发送一个intent这样如果你的服务在处理它的时候被Kill掉, Intent不会丢失.
Summary 总结
公有方法
final ApplicationgetApplication()
返回持有该服务的应用程序.
abstract IBinderonBind(Intent intent)
返回该服务的通信通道.
void onCreate()
该服务第一次被创建时调用.
更多精彩
赞助商链接