Android Services---基础

长平狐 发布于 2012/10/16 10:19
阅读 66
收藏 0
要创建一个服务,你必须创建一个Service类(或一个既存的Service子类)的子类。在你的实现中,你需要重写一些处理服务生命周期关键特征的回调方法,并且给组件提供一种合适的绑定服务的机制。需要重写的重要的回调方法如下:

onStartCommand()

当一个组件通过调用startService()方法请求启动一个服务时,系统会调用这个服务的onStartCommand()方法。一旦这个方法执行了,那么这个服务就被启动,并且在后台无限期的运行。如果你实现了这个方法,当服务的工作结束时,你有责任通过调用stopSelf()方法或stopService()方法来终止服务。(如果你只想让服务提供绑定的能力,你不需要实现这个方法。)

onBind()

当一个组件想通过调用bindService()方法跟这个服务(如执行RPC)绑定时,系统会调用这个方法。在这个方法的实现中,你必须通过返回一个IBinder对象给客户提供一个用户跟服务进行交互的接口。你必须实现这个方法,但是如果你不允许绑定,那么这个方法应该返回null。

onCreate()

当服务被第一次创建时,系统会调用这个方法来执行一次安装过程(它在onStartCommand()或onBind()方法之前调用)。如果服务正在运行,这个方法就不会被调用。

onDestroy()

当服务不再使用或正在销毁时,系统会调用这个方法。你的服务应该使用这个方法来实现一些清理资源的工作,如清理线程、被注册的监听器、接受器等。这是服务能够接受的最后的调用。

如果组件通过调用startService()方法启动服务,那么这个服务就会一直运行到它自己用stopSelf()方法终止服务,或另一个组件通过调用stopService()方法来终止它。

如果一个组件调用bindService()方法来创建这个服务(并且不调用onStartCommand()方法),那么这个服务只跟绑定的组件运行同样长的时间。一旦这个从所有的客户端解绑,系统就会销毁它。

Android系统只有在内存不足和必须给有用户焦点的Activity回收系统资源时,才会强制终止一个服务。如果服务是被一个有用户焦点的Activity绑定的,那么它不可能被杀死,并且如果这个服务被声明运行在前台(稍后讨论),那么它也几乎不能被杀死。否则如果这个服务被启动并且长时间运行,那么随着时间的推移系统会降低它在后台任务列表中位置,并且这个服务将很容易被杀死---如果你的服务被启动了,那么你必须把它设计成能够通过系统能够妥善的重启。如果系统杀死了你的服务,那么一旦资源变为有效它就会重启(虽然这也依赖从onStartCommand()方法返回的值,稍后讨论)。


原文链接:http://blog.csdn.net/fireofstar/article/details/7294203
加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部