service学习记录篇(2)

有缘千里来相会 优秀的小伙伴你又来了

大家好 我是菠萝派 今天我们来继续研究一下service

 

首先咋们了解一下Service的生命周期

Service生命周期

oncreate

在每个service的生命周期中这个方法仅会调用一次 并且他的调用在onStartCommand()和onBind之前我们可以在这个方法中进行一些一次性的初始化工作

 

onStartCommand

当其他组件通过startService()方法启动service时,此方法将会被调用

onBind当其他组件通过bindService()方法与service相绑定之后,此方法将会被调用这个方法有一个Ibind返回值 这意味着再重写他的时候必须返回一个Ibind对象 他是用来支撑其他组件与service之间的通信的---另外,如果你不想让这个service被其他组件所绑定,可以通过这个方法返回一个null值来实现

 

onDestroy

这是service一生中调用的最后一个方法当这个方法被调用后,service就会被销毁,我们应当在这个方法里面进行一些资源的清理,比如注册一些监听器什么的

个人:

 

oncreate 创建 只会调用一次

onstartCommand(启动命令) 其他组件 不包括broatcast receiver 通过startService启动service是 该方法会被调用

onBind 当其他组件通过bindService绑定service时,会调用 主要是用来绑定的

 

onDestroy:结束服务的

 

还有就是service的属性直接看看官方的最新介绍:https://developer.android.google.cn/guide/topics/manifest/service-element#proc

 

了解完service的基本使用后

我们需要了解一下bindservice的使用 这里涉及到的还是相当多的 闲话不多说 步入正文

要完成客户端与服务端的绑定,有两件事情要做 一是在客户端完成bindService的调用及其相关配置

,二是在服务端里面实现onBind()方法的重写,返回一个用作信息交互的Ibinder接口

个人:Bindservice的使用 需要服务端 与 客户端 在服务端重写onBind方法 返回一个用作信息交互的Ibinder方法 另外一个在客户端使用bindService的调用及其配置

 

客户端的配置

客户端原则上来讲调用bindservice方法就可以了,然而事实没有那么简单 原因出在bindService上面

public boolean bindService(Intent inten,ServiceConnection connection,int flags){

return mbase.bindService(service,conn,flgs);

}

可以看到,bindService需要三个参数,第一个是intent等同于startService的那个intent如

Intent intent = new Inten(MainActivity,this,ServiceDemo.class);

startService(intent);

用来启动哪一个service以及传递一些数据过去

第二个参数很陌生,他是实现客户端与服务端通信的一个关键类.要想实现它,就必须重写两个回调方法:onServiceConnected 以及OnServiceDisconnected(),而我们可以通过两个回调方法得到服务端里面的Ibinder对象 从而达到通信的目的

 

bindService方法的第三个参数是一个int值,还叫flag(这flag立的)它是用来做什么的 他是一个指示绑定选项的标志 通常应该是BIND_AUTO_CRATE,以便创建尚未激活的服务 其他可能的值为BIND-DEBUG_UNBIND和BIND_NOT_FOREGROUND或0(表示无)

个人:bindService的第三个参数 有三种方式

BIND_AUTO_CRATE 创建没有激活的服务

BIND_DEBUG_UNBIND 结合调试解开

 BIND_NOT_FOREGROUND 绑定没有前景

 

接下来说一说服务端要进行的操作:

 

如果要创建一个支持绑定的service,我们必须要重写它的onBind()方法。这个方法会返回一个IBinder对象,它是客户端用来和服务器进行交互的接口。而要得到IBinder接口,我们通常有三种方式:继承Binder类,使用Messenger类,使用AIDL。

 

可以看到 这里提出了一个Ibinder接口 他是很重要的 为了提高性能而设计的轻量级远程调用机制的核心部分 当然 它不仅仅可以远程调用 也可以用在进程内调用 事实上 我们现在所说的service这里的Ibinder即有可能出现IPC(进程间通信)也有可能出现进程内调用的场景 比如用它来进行进程内客户端与服务器的交互 Ibinder 的具体原理先不说 咋们初步了解一下 为了Aidl打下基础

通俗的说 获得IBinder的三种方式:继承Binder类,使用Messager类,使用Aidl 接下来我就以这三种方式展开:

个人小结:

binder 想对与以前学的东西而言 已经是比较高深点的东西了 推荐一个博客 是专门讲Binder的https://www.jianshu.com/p/04a034cbbc27

好了 今天就讲到这里 咋们明天就讲如何简单的实现Aidl通信

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值