android服务的周期生命,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) 第一次启动服务时:

d242677cec27b07c34d99362e8205545.png

执行了onCreate方法和onStartCommand方法

(2) 再次点击开启服务:

79a84c9ed64d598155a08298532eab11.png

只会执行onStartCommand方法

(3) 停止服务

69d6fe910ed94b1e0df80c7e8835d66b.png

执行onDestroy方法

2.  绑定类型的服务

(1) 绑定服务

a3df9982822056ae859b153ca729887a.png

调用了onCreate方法和onBind方法

(2) 解绑服务

c54e7efbeea447e108cff5823484728c.png

先调用了onUnBind方法再调用onDestroy方法

下图说明了一个服务的典型回调方法。尽管这个图把由startService()方法创建的服务与由bindService()方法创建的服务给分开了,

但是请记住,任何服务,不管它是怎样启动的,都可能允许客户绑定它。

因此用onStartCommand()方法(通过一个客户端调用startService()方法)初始启动的服务,

依然能够接收onBind()的调用(在客户端调用bindService()方法时)。

a3c09321cdde2354c49631e5a01af730.gif

图的左边显示了用startService()方法创建服务时的生命周期

图的右边显示了用bindService()方法创建服务时的生命周期

注意: 建议启动服务的顺序,这样不会出现问题:

1. 开启服务  --- 保证服务一直后台运行

2. 绑定服务  --- 可以调用服务中的方法

3. 调用服务中的方法

4. 解绑服务  --- 这时服务依然后台运行

5. 停止服务

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 ...

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 ...

随机推荐

NET实现微信公共平台上传下载多媒体文件(转)

举个例子,有人对着我们的公共微信号拍个照片发送过来,然后我们处理这个照片,比如进行ocr识别字(随后就会降到这个例子),或者人脸识别,或者拍照取证等,这些功能都是相当有用的.那么我们现在就要分析一下这 ...

BZOJ2080 : [Poi2010]Railway

如果存在$k$使得$i

MATLAB学习笔记(六)——MATLAB数据分析与多项式计算

(一)数据处理统计 一.最大值和最小值 1.求向量的最大值和最小值 y=max(X); %返回向量X的最大值存入y,如果X中含有复数则按模最大的存入y [y,I]=max(X);%返回向量X的最大值存 ...

极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒

链接地址:http://www.cnblogs.com/armyfai/p/4646213.html 要:在这里我们将看到的是C#中利用ODP实现在Oracle数据库中瞬间导入百万级数据,这对快速批量 ...

iPhone、iPad强制关机

情景:iPad測试应用过程中死机了. 解决:同一时候按住右上方的电源键和屏幕下方的HOME键大约10秒左右. 就会自己主动强制断电关机,然后重新启动. 强制重新启动后你会看到进入苹果的标志,然后进入主 ...

自己使用Vue全家桶问题合集(很多eslint规范问题)

遇到很多问题一一道来. 1.vue报错 Do not use built-in or reserved HTML elements as component id:header 组件,不能和html标 ...

linux常用命令合集(未完)

(1)新建 新建文件夹:mkdir 文件夹名 新建文件:touch 文件路径/文件名 删除: rm –f filename删除文件 rm –rf filename删除文件夹 (2)重命名 1将一个名为 ...

如何解决python升级后yum报错

当我们yum命令的时候,会提示 "File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxEr ...

blfs(systemv版本)学习笔记-编译安装sudo并创建普通用户配置sudo权限

我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs书中sudo的安装配置章节:http://www.linuxfromscratch.org/blfs/view/8.3/ ...

python 全栈开发,Day85(Git补充,随机生成图片验证码)

昨日内容回顾 第一部分:django相关 1.django请求生命周期 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值