Android中服务的生命周期与两种方式的区别
服务的生命周期跟Activity的生命周期类似。但是生命周期甚至比你关注服务如何创建和销毁更重要,因为服务能够在用户不知情的情况下在后台运行。
服务的生命周期---从创建到销毁---可以被分为以下两个路径:
1. 启动类型的服务: onCreate()- >onStartCommand()->Service running--调用context.stopService() ->onDestroy()
2. 绑定类型的服务: onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy()
其中绑定服务才可以调用服务中的方法
以下是笔者写的一个demo代码:
@Override
public void onCreate() {
System.out.println("服务被创建了concreate");
super.onCreate();
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("开启服务 onStartCommand ");
return super.onStartCommand(intent, flags, startId);
} @Override
public IBinder onBind(Intent intent) {
System.out.println("绑定服务调用了 onBind");
return new MyBinder();
} @Override
public boolean onUnbind(Intent intent) {
System.out.println("解绑服务 onUnbind");
return super.onUnbind(intent);
} @Override
public void onDestroy() {
System.out.println("服务被销毁了ondestroy");
super.onDestroy();
}
其中onCreate方法已经过时,取而代之的是onStartCommand()
1. 启动类型的服务
(1) 第一次启动服务时:

执行了onCreate方法和onStartCommand方法
(2) 再次点击开启服务:

只会执行onStartCommand方法
(3) 停止服务

执行onDestroy方法
2. 绑定类型的服务
(1) 绑定服务

调用了onCreate方法和onBind方法
(2) 解绑服务

先调用了onUnBind方法再调用onDestroy方法
下图说明了一个服务的典型回调方法。尽管这个图把由startService()方法创建的服务与由bindService()方法创建的服务给分开了,
但是请记住,任何服务,不管它是怎样启动的,都可能允许客户绑定它。
因此用onStartCommand()方法(通过一个客户端调用startService()方法)初始启动的服务,
依然能够接收onBind()的调用(在客户端调用bindService()方法时)。

图的左边显示了用startService()方法创建服务时的生命周期
图的右边显示了用bindService()方法创建服务时的生命周期
注意: 建议启动服务的顺序,这样不会出现问题:
1. 开启服务 --- 保证服务一直后台运行
2. 绑定服务 --- 可以调用服务中的方法
3. 调用服务中的方法
4. 解绑服务 --- 这时服务依然后台运行
5. 停止服务
Android中服务的生命周期与两种方式的区别的更多相关文章
- Android中H5和Native交互的两种方式
Android中H5和Native交互的两种方式:http://www.jianshu.com/p/bcb5d8582d92 注意事项: 1.android给h5页面注入一个对象(WZApp),这个对 ...
- Android(java)学习笔记227:服务(service)之服务的生命周期 与 两种启动服务的区别
1.之前我们在Android(java)学习笔记171:Service生命周期 (2015-08-18 10:56)说明过,可以回头看看: 2.Service 的两种启动方法和区别: (1)Servi ...
- Android(java)学习笔记170:服务(service)之服务的生命周期 与 两种启动服务的区别
1.之前我们在Android(java)学习笔记171:Service生命周期 (2015-08-18 10:56)说明过,可以回头看看: 2.Service 的两种启动方法和区别: (1)Servi ...
- Android中服务的生命周期回调方法
- 2、ASP.NET Core中服务的生命周期
ASP.NET Core支持依赖注入软件设计模式,它允许在不同的组件中注入我们的服务,并且控制服务的初始化.有些服务可以在短时间内初始化,并且只能在某个特别的组件,以及请求中才能用到:而还有一些服务, ...
- 不停止MySQL服务增加从库的两种方式
不停止MySQL服务增加从库的两种方式 转载自:http://lizhenliang.blog.51cto.com/7876557/1669829 现在生产环境MySQL数据库是一主一从,由于业务量访 ...
- 不停止MySQL服务增加从库的两种方式【转载】
现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作. ...
- java中读取配置文件ResourceBundle和Properties两种方式比较
今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网 ...
- python中字典的循环遍历的两种方式
开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...
随机推荐
- python --数据可视化(一)
python --数据可视化 一.python -- pyecharts库的使用 pyecharts--> 生成Echarts图标的类库 1.安装: pip install pyecharts ...
- Java线程池的构造以及使用
有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长.而且当线程数量太多时, ...
- salt-api配置安装 以及使用
salt-api salt-api是我们通过restful-api调用salt-master的接口,且调用的时候必须通过认证才能调用,认证的用户为系统用户,下面就说说如何配置salt-api. 安装S ...
- Aria2+WebUI,迅雷倒下之后的代替品
Aria2+WebUI,迅雷倒下之后的代替品 (2017-07-24 12:56:28) 转载▼ 分类: 软件 最近迅雷越来越作死了,砍第三方远程下载,强推迅雷9喂用户的屎,下载资源能砍就砍,以前 ...
- HOSTNAME问题 和yum配置163源的操作 安装lsb_release,KSH,CSH
HOSTNAME 在 /etc/hosts 里添加一行 127.0.0.1 yourhostname yum配置 来自http://www.cnblogs.com/wutengbiao/p/41889 ...
- Flink官方文档/介绍/教程/用例
https://flink.apache.org/ 使用谷歌浏览器进入官网后,点击页面右键,使用谷歌翻译,翻译准确率很高: 常用部分:
- SLICK基础
1.sbt添加依赖 "com.typesafe.slick" %% "slick" % "3.2.3", "org.slf4j&q ...
- 3.在自己的bag上运行Cartographer ROS
1.验证自己的bag cartographer ROS提供了一个工具cartographer_rosbag_validate来自动分析包中的数据.在尝试调试cartographer之前运行这个工具. ...
- SAS数据集
SAS数据集是存储在SAS逻辑库中.由SAS创建和处理的SAS文件,是SAS存储数据的主要方式.SAS数据集包含以表的观测(行)和 变量(列)为形式存在的数据值,以及用以描述变量类型.长度和创建该数据 ...
- 在Unity5.6.5f1中使用C#7语法
备忘,记忆力越来越差了,必需把这种琐碎的东西记下来,以防1年后想再用完全没头绪. 之前试过用C#6语法,但是怎么配置操作的完全没印象了. 首先去这下载扩展 https://bitbucket.org/ ...