android service
概念:android service 服务, 是andorid 四大组件之一
作用:用于处理后台任务
运行特性:它本身是跑在主线程中的的,所以如果在service 中处理耗时操作,应该启动子线程或者子任务来执行
使用:
1. 启动方式: startService bindService
- startService 这种方式启动的service 和调用者之间没有直接的关联关系,就是说启动后即使调用者销毁了, 后台会一直跑着这个service, 除非调用stopService方法
- bindService 这种方式启动的service是和调用者紧密联系在一起的,这种启动的service会随着调用者的销毁而销毁,也可以调用unbindservice主动销毁
2. 生命周期:
3. service 重要的理解点
-
第一次点击:不管是startService还是bindService,如果service还未存在,那么会调用
onCreate,之后如果是startService那么调用onStartCommand(),如果是
bindService那么会调用onBind()
之后,如果再调startService(),那么会调用onStartCommand();如果再调用
bindService那么如果第一次点击是bindService,那么就不会调用onBind(),否则
什么方法都不会被调用。当bindService后,不能stopService,需要通过unBindService()来解除绑定。
只是startService()后,不可以通过unBindService()来销毁service
-
通过bindService()函数绑定Servcie时, onCreate()函数和onBinde()函
数将先后被调用
通过unbindService()函数取消绑定Servcie时,onUnbind()函数将被调用,
如果onUnbind()函数的返回true,则表示在调用者绑定新服务时,
onRebind()函数将被调用取消绑定仅需要使用unbindService()方法,并将ServiceConnnection
传递给unbindService()方法
需注意的是,unbindService()方法成功后,系统并不会调用
onServiceDisconnected(),因为onServiceDisconnected()仅在意外断开
绑定时才被调用 -
startService()的目的是回调onStart()方法,onCreate() 方法是在Service
不存在的时候调用的,如果Service存在(例如之前调用了bindService,那
么Service的onCreate方法已经调用了)那么startService()将跳过onCreate
() 方法。
bindService()目的是回调onBind()方法,它的作用是在Service和调用者之
间建立一个桥梁,并不负责更多的工作(例如一个Service需要连接服务器
的操作),一般使用bindService来绑定到一个现有的Service(即通过
StartService启动的服务)。 -
多次调用startService和bindService ,最终都是同一个对象