码迷,mamicode.com
首页 > 其他好文 > 详细

Service相关

时间:2015-02-02 23:04:45      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

Service一直在后台运行,没有用户界面,所以绝不会到前台来。如果某个程序组件要在运行时间向用户呈现某种界面,或该程序需要与用户交互,就需要使用Activity,否则就应该考虑使用Service

ServiceActivity一样,有自己的生命周期。

技术分享

开发Service只需要两个步骤:

1>定义一个继承Service的子类

2>在AndroidManifest.xml文件中配置该Service,配置Service使用<service.../>元素,配置Service时也可为<service.../>元素配置<intent-filter.../>子元素,用于说明该Service可被哪些Intent启动

Service系列生命周期方法:

IBinder onBind(Intent intent):该方法是Service子类必须实现的方法。该方法返回一个有效的IBinder对象,应用程序可通过该对象与Service组件通信

Void onCreate():当该Service第一次被创建后将立即回调该方法

Void onDestroy():当该Service被关闭之前将会回调该方法

Void onStartCommand(Intent intentint flagsint startId):每次客户端调用startService(Intent intent)方法启动该Service时都会回调该方法

Boolean onUnbind(Intent intent):当该Service上绑定的所有客户端都断开连接时将会回调该方法

Android系统中运行Service有如下两种方式:

1>通过ContextstartService()方法:通过该方法启用Service,访问者与Service之间没有关联,Service和访问者之间无法进行通信、数据交换。即使访问者退出了,Service仍然运行。

2>通过ContextbindService()方法:使用该方法启用Service,访问者与Service绑定在了一起,访问者一旦退出,Service也就终止。bindService()方法的完整方法签名为:bindService(Intent serviceServiceConnection connint flags),该方法的三个参数:

Service:该参数通过Intent指定要启动的Service

Conn:该参数是一个ServiceConnection对象,该对象用于监听访问者与Service之间的连接情况。当访问者与Service之间连接成功时将回调ServiceConnection对象的onServiceConnected(ComponentName nameIBinder service)方法;当Service所在的宿主进程由于异常中止或其他原因终止,导致该Service与访问者之间断开连接时回调该ServiceConnection对象的onServiceDisconnected(ComponentName name)方法。但如果当调用者主动通过unBindService()方法断开与Service的连接时,ServiceConnection对象的onServiceDisconnected(ComponentName name)方法并不会被调用。

Flags:指定绑定时是否自动创建Service(如果Service还未创建)。该参数可指定为0(不自动创建)或BIND_AUTO_CREATE(自动创建)

Service生命周期还有一种特殊情形,如果Service已由某客户端通过startService()方法启动了,接下来其他客户端再调用bindService()方法来绑定该Service后,再调用unbindService()方法解除绑定,最后又调用了bindService()方法再次绑定Service,这时系统只是把Service内部IBinder对象传给Activity,并不会把该Service生命周期完全“绑定”到该Activity,因而当Activity调用unBindService()方法取消与该Service的绑定时,也只是切断该ActivityService之间的关联,并不能停止该Service组件,更不会回调onDestroy()方法。这个过程所触发的生命周期如右:onCreate()→onStartCommand()→onBind()→onUnbind()[重写该方法时返回了true]onRebind()。如果希望onRebind()方法被回调,除了需要该Service是由ActivitystartService()方法启动之外,还需要Service子类重写onUnbind()方法时返回true

Service相关

标签:

原文地址:http://blog.csdn.net/lindonglian/article/details/43421619

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!