最近学习了一下Service,主要看的官方文档,感觉记忆的东西太多,脑袋一团乱,特此总结一下:
Service的关键点主要有:如何创建一个Service、如何实现控件与Service之间的通信、Started和Bound之间的区别 以及Service的生命周期。
一、Service
Service是一种隐藏的应用控件,它长时间的在后台运行,其他用户可以通过开启或是绑定到一个Service,从而与之进行交互。可以通过自己或是其他控件停止开启的Service,绑定的Service会在没有绑定控件时停止。另外,Service的运行优先级仅比获得焦点的Activity低,所以一般只会在系统资源严重不足的时候被kill。
二、创建Service
要创建一个Service,必须是实例化一个Service的子类,Service本身是一个抽象类。
在子类中,关键是要复写几个重要的回调函数,以此来控制Service的生命周期,以及实现开启或是绑定方式。
1、onCreate()
类似Activity的onCreate(),在Service第一次被创建时,执行这个回调函数,如果该Service已经在运行了,则不调用该函数。
2、onDestroy()
同理,当Service停止不用或被销毁时,系统会调用这个函数来释放资源。
3、onStartCommand(),API5以前的版本是onStart()
如果只想让Service被绑定,就可以不用实现该函数。当实现了改函数, 其他控件可以通过调用startService()
来开启该Service,从此该Service就一直运行,即使创建开启它的控件已经被销毁。此时必须要控制Service的结束,可以在它完成功能后调用stopSelf()
来结束,或是通过其他控件调用stopService() 来结束它。
4、onBind()
该函数必须被实现,如果不允许该Service被绑定,可以在该函数中返回null。其他控件可以通过bindService() 来绑定到该Service,但是这个函数必须返回一个IBinder对象,该对象是客户与Service的交互接口。绑定的Service不用管理它的结束,系统会在没有任何控件绑定它时结束它。
当然,也可以通过继承Service的子类IntentService来创建一个Service的实例。相对于Service,IntentService会创建一个辅助线程来处理传递到onStartCommand()中的所有intents,它会创建一个辅助队列,每次从队列中传递一个intent到onHandleIntent() 中,这样就防止了多线程。而且,在所有intent都处理完后,系统就会结束该Service,所以不用管理它的资源回收。
当实现一个IntentService子类的时候,会得到一个默认的onBind()函数,返回null,以及一个默认的onStartCommand()函数,它将发送Intent到辅助队列,再发送到onHandleIntent() ,也就是说最简单的情况下,只需要实现onHandleIntent()。
三、Service的两种形式
当实现了Service的一个子类,并且在manifest中声明了它之后,我们就可以启动或是绑定这个Service了,当然也可以同时进行这两个动作,只要实现了(二)中的回调函数。
1、Started Service
正如前面所说,其他控件可以通过调用 startService()
来启动一个Service,并通过传递Intent到onStartCommand()
来指定是哪个Service,并与之进行交互。这种形式的Service必须管理它的结束。
2、Bound Service
而绑定到一个Service则是通过调用 bindService()
函数,并传递相应的Intent,并且回调函数onBind()必须返回一个IBinder对象来与客户进行交互。而解除绑定则是调用unbindService() 函数,当没有控件与之绑定时,Service就将被销毁。
四、Service的生命周期
生命周期包括完整周期:创建( onCreate()
)和销毁( onDestroy()
),活动周期:启动( onStartCommand()
)/绑定( onBind()
)和停止(onDestroy())/解除绑定( onUnbind()
),停止一个Started Service时,没有特别的回调函数,就只有onDestroy()。
五、小结
通过初步学习,了解到Service的创建方式:实现Service子类或是实现IntentService子类;Service的两种形式及区别;以及与Service之间的交互方法:传递Intent,绑定方式下的IBinder对象;Service的生命周期:完整的和活动的。
分享到:
相关推荐
一篇对于android service的详细总结
Ajax和Web_Service总结,技术文档,还不错的
最近学习Web Service的总结,主要是使用axis实现Web Service,其中有详细的用eclipse来完成Web Service的部署,以及生产客户端的代码。。。 好东西要大家分享哦....
service小结,关于多进程守护。
学习完delphi中的webservice部分,作此总结,已被后续复习
本文主要介绍Android Service的知识,这里整理了详细资料及简单实现示例代码,有需要的小伙伴可以参考下
service的启动,停止,绑定,取消绑定,以及IntentService的生命周期走向测试和IntentService与访问者信息通信过程,不清楚之处请参阅我的博客《Android开发四大组件之Service总结》
Java Service Wrapper使用总结,将java应用发布为可安装的服务
6.2.5 初识ActivityManagerService总结 6.3 startActivity分析 6.3.1 从am说起 6.3.2 AMS的startActivityAndWait函数分析 6.3.3 startActivityLocked分析 6.4 Broadcast和BroadcastReceiver分析 6.4.1 ...
web service开发步骤总结.rarweb service开发步骤总结.rar
Android Service大总结Demo 包括跨进程之间的通信。详情请参考博客
个人总结的 web service axis 总结文档 相关实例说明
Android之Service学习总结收集.pdf
这是一个关于Service与Activity通信的部分代码,及如何使用Service和Activity通信。
SQL Server2005 Reporting Service使用的一些总结
Axis+MyEclipse6.0+Tomcat5.0开发Web Service实例总结
Android实现双进程守护,如何保证Service不被Kill,onStartCommand方法,返回START_STICKY,手动返回START_STICKY,亲测当service因内存不足被kill,当内存又有的时候,service又被重新创建,比较不错,但是不能保证...
我的总结:重新安装mysql最后出现startService未响应解决方法.docx
本文实例总结了AngularJS服务service用法。分享给大家供大家参考,具体如下: 引言 最近在项目中用到了关于AngularJS中的服务相关的知识,在起初学习这个东西的时候就了解到这个东西在项目中是经常被用到的,在...
使用Ajax和Web Service 重构网上书店的基础知识总结