什么是Service
来源:互联网 发布:mac redis命令大全 编辑:程序博客网 时间:2024/05/22 11:35
Service是一个专门在后台处理长时间任务的Android组件,它没有UI。
但是在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。
Service的onCreate是在主线程(ActivityThread)中调用的,耗时操作会阻塞UI,会导致程序崩溃,一般会运行在子线程中,但是有个例外,IntentServie,这个Service只启动一次,而且执行的onHandlerIntent方法是在一个独立的线程中执行,执行完毕后,这个Service就会被销毁
Service 它有两种启动方式,startService和bindService。
当然 服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务
startService只是启动Service,启动它的组件(如Activity)和Service并没有关联,只有当Service调用stopSelf或者其他组件调用stopService服务才会终止。
在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。 如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。 如果要停止只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
bindService方法启动Service,其他组件可以通过回调获取Service的代理对象和Service交互,而这两方也进行了绑定,当启动方销毁时,Service也会自动进行unBind操作,当发现所有绑定都进行了unBind时才会销毁Service。简单的说就是不求同时生,必须同时死,onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。采用Context.bindService()方法启动服务时只能调用onUnbind()方法解除调用者与服务解除,服务结束时会调用onDestroy()方法。
要注意的是 当系统内存低时,系统将强制停止Service的运行;若Service绑定了正在与用户交互的activity,那么该Service将不大可能被系统kill,如果创建的是前台Service,那么该Service几乎不会被kill(almost never be killed)。否则,当创建了一个长时间在后台运行的Service后,系统会降低该Service在后台任务栈中的级别——这意味着它容易被kill,所以在开发Service时,需要使Service变得容易被restart,因为一旦Service被kill,再restart它需要其资源可用时才行
Service的生命周期
完整生命周期( entire lifetime ):从
onCreate()
被调用到onDestroy()
返回。与Activity类似,一般在onCreate()
中做一些初始化工作,而在onDestroy()
做一些资源释放工作。如,若Service在后台播放一个音乐,就需要在onCreate()
方法中开启一个线程启动音乐,并在onDestroy()
中结束线程。-无论是
startService() 还是 bindService()
启动Service,onCreate() 和 onDestroy()
均会被回调。活动生命周期(active lifetime):从
若是Start Service,那么Service的活动生命周期结束就意味着其完整生命周期结束 (the active lifetime ends the same time that the entire lifetime ends),即便
!请注意:针对Start Service,由于Service中没有类似
onStartCommand() 或 onBind()
回调开始。由相应的startService() 或 bindService()
调用。 若是Start Service,那么Service的活动生命周期结束就意味着其完整生命周期结束 (the active lifetime ends the same time that the entire lifetime ends),即便
onStartCommand()
返回后,Service仍处于活动状态;若是bound Service,那么当onUnbind()
返回时,Service的活动生命周期结束。 !请注意:针对Start Service,由于Service中没有类似
onStop()
的回调,所以在调用stopSelf() 或 stopService()
后,只有onDestroy()
被回调标志着Service已停止。举例
本地服务 Local Service 用于应用程序内部。
它可以启动并运行,直至有人停止了它或它自己停止。在这种方式下,它以调用Context.startService()启动,而以调用Context.stopService()结束。它可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。不论调用了多少次startService()方法,你只需要调用一次stopService()来停止服务。
它可以启动并运行,直至有人停止了它或它自己停止。在这种方式下,它以调用Context.startService()启动,而以调用Context.stopService()结束。它可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。不论调用了多少次startService()方法,你只需要调用一次stopService()来停止服务。
用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。
远程服务 Remote Service 用于android系统内部的应用程序之间。
它可以通过自己定义并暴露出来的接口进行程序操作。客户端建立一个到服务对象的连接,并通过那个连接来调用服务。连接以调用Context.bindService()方法建立,以调用 Context.unbindService()关闭。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
它可以通过自己定义并暴露出来的接口进行程序操作。客户端建立一个到服务对象的连接,并通过那个连接来调用服务。连接以调用Context.bindService()方法建立,以调用 Context.unbindService()关闭。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可。
0 0
- 什么是Service
- 什么是Service
- 什么是Service
- 什么是Service, 以及Service 模板
- 什么是Web Service
- 什么是Web Service ?
- 什么是web service?
- 什么是Web Service?
- 什么是Web Service
- 什么是WEB SERVICE??
- 什么是Web Service?
- 什么是Web Service?
- 什么是Web Service?
- 什么是Web Service
- 什么是Web Service?
- 什么是Web Service?
- 什么是Web Service?
- 什么是Web Service?
- 何时、如何开启 MySql 日志?
- 关于Struts2 DMI的一些设置
- 5-48 龟兔赛跑 (20分)
- 《图灵程序设计丛书 算法》第4版.pdf:
- 引入第三方类文件遇到的问题
- 什么是Service
- IDEA--个性化配置
- 【maven】maven的安装及Eclipse中的配置
- 给笔记本添加第二块显示屏
- Cookie报错java.lang.IllegalArgumentException
- 基于Java的打包jar、war、ear包的作用与区别详解
- 什么是android运行原理
- SQL优化练习
- MAC通过SMB访问windows共享文件夹用户名密码都正确却无法连接