服务:
android中服务是运行在后台的东西,级别与activity差不多。既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西。你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作。
Service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时的请求或者动作。你可以在服务中开一个线程,在线程中做耗时动作。
进程的优先级-----依次升高
1, 空进程—打开应用程序后推出,执行ondestory方法进程就属于空进程,系统内存不足时,首先回收,
2, 后台进程—打开应用程序后按下home键,执行onstop方法该actity就变成了后台进程
3,服务进程—当进程里有服务运行的时候这个进程就是服务进程,系统会尽量保存有服务的进程,为了保证线程长期的运行,一般就会应用service组件去new一个线程(提高进程的优先级)
4,可见进程,有界面
5,前台进程,可以点击
服务的开发流程如下:
第一步:继承Service类
public class SMSService extends Service {}
第二步:在AndroidManifest.xml文件中的<application>节点里对服务进行配置:
<serviceandroid:name=".SMSService"/>
service的生命周期
Service的生命周期Service的生命周期方法比Activity少一些,只有onCreate,onStart,onDestroy
我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。
1通过startService
Service会经历onCreate->onStart
stopService的时候直接onDestroy
如果是调用者(TestServiceHolder)自己直接退出而没有调用stopService的
话,Service会一直在后台运行。
下次TestServiceHolder再起来可以stopService。
2通过bindService
Service只会运行onCreate,这个时候TestServiceHolder和TestService绑定在一起
TestServiceHolder退出了,Srevice就会调用onUnbind->onDestroyed
所谓绑定在一起就共存亡了。
要是这几个方法交织在一起的话,会出现什么情况呢?
一个原则是Service的onCreate的方法只会被调用一次,就是你无论多少次的startService又bindService,Service只被创建一次。如果先是bind了,那么start的时候就直接运行Service的onStart方法,如果先是start,那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,对啊,就是stopService不好使了,只能先UnbindService,再StopService,所以是先start还是先bind行为是有区别的。