一个服务就是一个能够在后台执行长时操作的应用程序组件,并且不提供用户界面。一个应用程序组件能够启动一个服务,即使用户切换到另一个应用程序,这个服务也会继续在后台运行。另外,一个组件能够绑定一个跟它交互的服务,甚至是进程间通信(IPC)。例如,一个服务可以处理网络事务、播放音乐、执行文件I/O、或者跟内容提供器交互,所有这些都是在后台完成的。
一个Service基本上有两种形式:
被启动(Started)
当应用程序组件(如一个Activity)通过调用startService()方法启动的服务是“被启动(started)”的。服务一旦启动,它就能够无限期的在后台运行,即使启动它的组件被销毁。通常,一个被启动的服务之星一个单一操作,并且不给调用者返回结果。例如,这个服务可能在网络上下载或上传文件。当操作完成的时候,服务应该自己终止。
被绑定(Bound)
当一个应用程序组件通过调用bindService()方法绑定的服务是“被绑定(bound)”的。一个被绑定的服务会提供一个允许组件跟服务交互的客户端接口,用于发送请求、获取结果、甚至是跨进程的进程间通信(IPC)。一个被绑定的服务的运行时间跟绑定它的应用程序组件一样长。多个组件能够绑定一个服务,但是只有所有这些绑定解绑,这个服务才被销毁。
尽管这份文档分开讨论服务的这两种方式,但是你的服务能够用这两种方式工作---它能够被启动(无限期的运行),也允许绑定。这取决你是否实现了一对回调方法:运行组件启动的onStartCommand()方法和允许绑定的onBind()方法。
无论你的应用程序是启动、绑定或同时使用这两种方式开启一个服务,任何应用程序组件都能使用这个服务(即使是单独的应用程序),用同样的方法,任何组件能够使用一个Activity---通过Intent启动Activity。但是,你能够在清单文件中声明私有的服务,并且阻止来自其他应用程序的访问。
警告:一个服务运行在它的宿主进程的主线程中---这个服务不创建它自己的线程,并且不在一个单独的进程中运行(除非你指定)。这就意味着如果你的服务要做一些频繁的CPU工作或阻塞操作操作(如MP3的回放或网络操作),你应该在这个服务中创建一个新的线程来做这项工作。通过使用一个单独的线程,你会减少应用程序不响应(ANR)的错误风险,并且应用程序的主线程能够保留给用户,专用于跟Activity的交互。
注:本人转载系个人觉得翻译的很好,值得收藏,且自己回头看着方便。
如有兴趣请访问作者官方博客http://blog.csdn.net/FireOfStar
分享到:
相关推荐
解决: Could not find play-services-basement.aar (com.google.android.gms:play-services-basement:15.0.1). Searched in the following locations: ...
SafetyNet provides services for analyzing the configuration of a particular device to verify that it passes the Android compatibility test. This repository consists of one client and two server ...
从Android位置服务打开对话框的React-Native组件安装大多是自动安装(推荐) yarn add react-native-android-location-services-dialog-box 要么npm install react-native-android-location-services-dialog-box --...
play-services-base.properties
iptables-services-1.4.21-28.el7.x86_64.rpm 下载安装
google-play-services版本15.0.1,依赖工程可直接引用到项目中,适用Eclipse及AndroidStudio开发环境,快捷方便,本人亲自整理,后续资源有问题可咨询。若后续google-play-services如需其他版本迭代,也可让我更进。
centOS7适用,iptables-services-1.4.21-35.el7.x86_64.rpm
Android-PlayServices-FaceDetection, 在Android上,对人脸检测的介绍 Envato Tuts 教程: Android中人脸检测技术的介绍: Paul trebilcox-ruiz在游戏服务 8.1中引入视觉库时,人脸检测便于你分析视频或者图像来定位...
play-services-ads-lite-18.3.0是2019-11-23为止,最新的安卓admob sdk,用于原生安卓介入 加入工程后: import com.google.android.gms.ads.AdListener; import com.google.android.gms.ads.AdRequest; import ...
google-play-services-ads Eclipse库项目基于: 进口: 文件>导入...>团队>团队项目集> URL: 要求: Android 9 (API 28) SDK Platform 参考:
iptables-services-1.4.21-34.el7.x86_64.rpm
<!... ... <artifactId>emas-services ...mvn install:install-file -DgroupId=com.aliyun.ams -DartifactId=emas-services -Dversion=1.0.1 -Dpackaging=jar -Dfile=F:\jars\emas-services-1.0.1.jar
例如,你可以使用`webservices-api`和`webservices-extra-api`来定义服务接口和数据模型,`webservices-rt`来处理服务的运行时逻辑,而`webservices-tools`则帮助你在开发过程中进行验证和调试。 总的来说,"web...
iptables-1.4.21-35.el7.i686.rpm和iptables-services-1.4.21-35.e
itms-services-LutubeWap_uhgfyin69005.mobileconfig
webservices-api.jar包
android-services-demo, 用于服务和通知的Android演示( 星期 4 ) 服务演示这是一个用于服务和通知的Android演示,包括:使用 IntentService使用ResultReceiver在IntentService和 Activity 之间进行通信使用 ...
FluentLenium.zip,针对fluentleniumfluentlenium的assertj扩展是一个网站和移动自动化框架,它扩展了selenium来编写可靠和有弹性的ui功能测试。这个框架已经准备好了。由日常自动化基于浏览器的测试的人员编写和维护...
在java开发services中,会用到: 1.webservices-api.jar 2.webservices-extra.jar 3.webservices-rt.jar 4.webservices-tools.jar 5.webservices-extra-api.jar 此压缩文件里就是这五个jar文件。
iptables-sesrvices1.4.21版本