我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

【学习笔记】Android中Service通信

一、Service的生命周期onCreate  onStart  onDestroy  onBind )

成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、网站制作、镶黄网络推广、小程序定制开发、镶黄网络营销、镶黄企业策划、镶黄品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供镶黄建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

1). 被启动的服务的生命周期:如果一个Service被某个Activity 调用 Context.startService 方法启动,那么不管是否有Activity使用bindService绑定或unbindService解除绑定到该Service,该Service都在后台运行。如果一个Service被startService 方法多次启动,那么onCreate方法只会调用一次,onStart将会被调用多次(对应调用startService的次数),并且系统只会创建Service的一个实例(因此你应该知道只需要一次stopService调用)。该Service将会一直在后台运行,而不管对应程序的Activity是否在运行,直到被调用stopService,或自身的stopSelf方法。当然如果系统资源不足,android系统也可能结束服务。

2). 被绑定的服务的生命周期:如果一个Service被某个Activity 调用 Context.bindService 方法绑定启动,不管调用 bindService 调用几次,onCreate方法都只会调用一次,同时onStart方法始终不会被调用。当连接建立之后,Service将会一直运行,除非调用Context.unbindService 断开连接或者之前调用bindService 的 Context 不存在了(如Activity被finish的时候),系统将会自动停止Service,对应onDestroy将被调用。

3). 被启动又被绑定的服务的生命周期:如果一个Service又被启动又被绑定,则该Service将会一直在后台运行。并且不管如何调用,onCreate始终只会调用一次,对应startService调用多少次,Service的onStart便会调用多少次。调用unbindService将不会停止Service,而必须调用 stopService 或 Service的 stopSelf 来停止服务。

4). 当服务被停止时清除服务:当一个Service被终止(1、调用stopService;2、调用stopSelf;3、不再有绑定的连接(没有被启动))时,onDestroy方法将会被调用,在这里你应当做一些清除工作,如停止在Service中创建并运行的线程。

二、外界与服务通信

在MainActivity里,获取数据放入intent里,然后启动服务

【学习笔记】Android中Service通信

在Service里如何获取MainActivity里的数据呢?由于Service被启动后,会执行onStartCommand方法,所以我们重写这个方法,用intent接收数据

【学习笔记】Android中Service通信

三、绑定Service通信(bindSerivce->onCreate->onBind->running->onUnbind->onDestroy)

1)在MainActivity里通过bindService执行绑定

bindService(new Intent(this,MyService.class),this, Context.BIND_AUTO_CREATE);

2)执行这个函数的时候MyService中的onCreate函数执行,然后执onBind函数,重写该方法。该方法返回了一个iBinder,iBander是一个接口,方法里要返回一个实例,我们需要再写一个类继承安卓系统Binder类

【学习笔记】Android中Service通信

3)iBander实例通过MainActivity的bindService的this调用onServiceConnected函数来接收

【学习笔记】Android中Service通信

4)在MainActivity中的binder来调用MyService中setData方法来传输数据,完成和service的通信

binder.setData(edt.getText().toString());

网站标题:【学习笔记】Android中Service通信
文章URL:http://shouzuofang.com/article/pchpse.html

其他资讯