A service is "bound" when an application component binds to it by calling

通过startService()启动的服务处于“启动的”状态,一旦启动,service就在后台运行,即使启动它的应用组件已经被销毁了。通常started状态的service执行单任务并且不返回任何结果给启动者。比如当下载或上传一个文件,当这项操作完成时,service应该停止它本身。

还有一种“绑定”状态的service,通过调用bindService()来启动,一个绑定的service提供一个允许组件与service交互的接口,可以发送请求、获取返回结果,还可以通过夸进程通信来交互(IPC)。绑定的service只有当应用组件绑定后才能运行,多个组件可以绑定一个service,当调用unbind()方法时,这个service就会被销毁了。

另外,在官方的说明文档中还有一个警告:

Caution: A service runs in the main thread of its hosting process—the service does not create its

own thread and does not run in a separate process (unless you specify otherwise). This means that, if your service is going to do any CPU intensive work or blocking operations (such as MP3 playback or networking), you should create a new thread within the

service to do that work. By using a separate thread, you will reduce the risk of Application Not Responding (ANR) errors and the application's main thread can remain dedicated to user interaction with your activities.

意思是service与activity一样都存在与当前进程的主线程中,所以,一些阻塞UI的操作,比如耗时操作不能放在service里进行,比如另外开启一个线程来处理诸如网络请求的耗时操作。如果在service里进行一些耗CPU和耗时操作,可能会引发ANR警告,这时应用会弹出是强制关闭还是等待的对话框。所以,对service的理解就是和activity平级的,只不过是看不见的,在后台运行的一个组件,这也是为什么和activity同被说为Android的基本组件。

Service生命周期中的一些方法:

通过这个图可以看到,两种启动service的方式以及他们的生命周期,bind service的不同之处在于当绑定的组件销毁后,对应的service也就被kill了。service的声明周期相比与activity的简单了许多,只要好好理解两种启动service方式的异同就行。

service生命周期也涉及一些回调方法,这些方法都不用调用父类方法,具体如下:

publicclassExampleServiceextendsService {

intmStartMode;// indicates how to behave if the service is killed

IBinder mBinder;      // interface for clients that bind

booleanmAllowRebind;// indicates whether onRebind should be used

@Override

publicvoidonCreate() {

// The service is being created

}

@Override

publicintonStartCommand(Intent intent,intflags,intstartId) {

// The service is starting, due to a call to startService()

returnmStartMode;

}

@Override

publicIBinder onBind(Intent intent) {

// A client is binding to the service with bindService()

returnmBinder;

}

@Override

publicbooleanonUnbind(Intent intent) {

// All clients have unbound with unbindService()

returnmAllowRebind;

}

@Override

publicvoidonRebind(Intent intent) {

// A client is binding to the service with bindService(),

// after onUnbind() has already been called

}

@Override

publicvoidonDestroy() {

// The service is no longer used and is being destroyed

}

}关于Service生命周期还有一张比较易懂的图(来源于网络)

另外,这里要说明Service的一个子类,IntentService,首先看下官方文档的说明:

android中service名词解释,Android中Service(服务)详解相关推荐

  1. android 内存分析 名词解释,Android内存分析和调优(下)

    出自:http://www.cnblogs.com/zdwillie/p/3287150.html 最后一部分是关于native heap,.dex,/dev/other的优化.​ Native He ...

  2. 事务、提交、回滚、脏读、幻读等名词解释以及事务隔离级别详解

    看视频的时候,听大佬说commit.事务.脏数据等等名词,听的弟弟是一脸懵呀,今天特地搜集.整理出来了这些名词的解释了,下面我们一起看一下. 文章目录 事务:transaction 概念 四个属性(A ...

  3. android启动页使用gif,android中使用react-native设置应用启动页过程详解

    一.背景 在我们使用react-native进行编写代码的时候,当启动应用的时候,我们会看到如下界面 然而,这样的启动界面是非常的不又好,那么我们该怎么进行处理启动界面呢?有如下两种方案 二.方案 1 ...

  4. android fragment加载布局的方式,Android中Fragment的加载方式与数据通信详解

    Android中Fragment的加载方式与数据通信详解 发布时间:2020-08-22 18:55:57 来源:脚本之家 阅读:155 作者:Joah 一.加载方式 1. 静态加载 1.1 加载步骤 ...

  5. Android VCard联系人备份恢复(导入/导出)详解

    原文地址为: Android VCard联系人备份恢复(导入/导出)详解 首先我们简单的看下在Android中联系人的存储结构. 工作环境:android 2.3.3 联系人的主要数据存放在raw_c ...

  6. android NSD服务详解

    android NSD服务详解 一.NSD的基础知识: NSD全称为: Network Service Discovery.翻译过来的意思就是发现服务器网络的意思.理解的说就是:发现服务器对应的网络信 ...

  7. 阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解

    阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解 阿里聚安全的Android应用漏洞扫描器有一个检测项是本地拒绝服务漏洞的检测,采用的是静态分析加动态模糊测试的方法来检测,检测结果准确 ...

  8. Android M新特性Doze and App Standby模式详解

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52312122 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  9. Android基础入门教程——8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash

    Android基础入门教程--8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash 标签(空格分隔): Android基础入门教程 本节引言: 在Canva ...

最新文章

  1. Python中的过滤器
  2. matplotlib如何把坐标轴一横一竖给绘制出来
  3. 【Android 进程保活】应用进程拉活 ( 双进程守护 + JobScheduler 保活 | 成功率最高 | 推荐使用 )
  4. html.编辑数据回显,从HTML表格编辑/更新MySQL数据库值
  5. java操作数据库出错
  6. 使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题
  7. mysql数据库更改文档_更改MySQL数据库目录位置
  8. php mysql 冒号_php – 使用pdo在搜索变量中使用冒号(:)进行查询
  9. MapReduce源码刨析
  10. 95-36-220-ChannelHandler-RejectedExecutionHandlers
  11. C#判断联网状态检查电脑联网状态
  12. java核心基础 --- 基本数据类型
  13. JavaScript:如何将消息打印到错误控制台?
  14. 打开终端报错:bash: /某路径/bashrc: No such file or directory
  15. idea + debug
  16. linux performance test
  17. XSS靶场(二)xss.haozi
  18. c语言强制类型转换成整形,C语言强制类型转换
  19. W3C 标准 较详细
  20. cpu功耗排行_2019.10.31性能和功耗CPU显卡天梯图

热门文章

  1. C语言中反斜杠“\“的意义和用法
  2. python预测模型各国pm2.5年平均值_用scikit-learn来预测北京的pm2.5
  3. 梦幻西游进入游戏显示服务器程序停止工作,Windows7系统提示“梦幻西游已停止工作”如何解决...
  4. java捕获sybase主键重复异常_sybase错误码
  5. Android之发送短信和接收验证码
  6. 微信小程序接收验证码实例
  7. TF1-项目搭建配置及用户登录
  8. 《使用 Python 和 Scrapy 半小时爬了 10 个在线商店的网页》
  9. starUML简单绘图
  10. 阿里云 OSS监控上传进度