Service之“绑定”

Service类中和Service绑定有关的回调函数有2个:

1.IBinder onBind(Intent intent);

该方法的返回值会传递给android.content.ServiceConnection.onServiceConnected(ComponentName name, IBinder service),如果该方法返回值为null,则该Service不能被绑定。

2.boolean onUnbind(Intent intent);

在client中可调用的和Service绑定有关的方法有如下2个:

1.boolean bindService(Intent,ServiceConnection,int);

    2.void unbindService(ServiceConnection);

这两个方法都定义于android.content.ContextWrapper类(Activity和Service都是ContextWrapper的子类)

上面提到了一个和Service绑定有关的接口为ServiceConnection,该接口中有两个方法:

1.void onServiceConnected(ComponentName name, IBinder service);

该方法在client和service成功建立连接时调用,name参数是所绑定的service的名字,service参数是Service.onBind(Intent intent)所返回的。

2.void onServiceDisconnected(ComponentName name);

该方法在client被kill掉时会被调用。注意:当client调用onUnbind(Intent intent)解绑时,该方法不会被调用。

注意事项:

1.绑定到service的client有主次之分

主client是指第一个绑定到该service上的client

次client是指之后绑定到该service的客户端

onBind是在主client绑定到该service上时才会调用

onUnbind是在主client与该service解绑时才会调用,至于在主client解绑之后,Service.onDestroy会不会被调用,取决于该service实例在unbind之前是否通过startService启动过;若是,则不会被调用;若不是,则调用。

2.绑定service不会调用service.onStartCommand(Intent,int,int);

时间: 2024-10-06 13:40:09

Service之“绑定”的相关文章

Android深入四大组件(三)Service的绑定过程

相关文章 Android深入理解四大组件系列 前言 我们可以通过调用Context的startService来启动Service,也可以通过Context的bindService来绑定Service,建议阅读此篇文章前请阅读Android深入四大组件(二)Service的启动过程这篇文章,知识点重叠的部分,本篇文章将不再赘述. 1.ContextImpl到ActivityManageService的调用过程 我们可以用bindService方法来绑定Service,它的实现在ContextWra

Android Service的绑定过程

通常我们使用Service都要和它通信,当想要与Service通信的时候,那么Service要处于绑定状态的.然后客户端可以拿到一个Binder与服务端进行通信,这个过程是很自然的. 那你真的了解过Service的绑定过程吗?为什么可以是Binder和Service通信? 同样的先看一张图大致了解一下,灰色背景框起来的是同一个类的方法,如下: 我们知道调用Context的bindService方法即可绑定一个Service,而ContextImpl是Context的实现类.那接下来就从源码的角度

【起航计划 034】2015 起航计划 Android APIDemo的魔鬼步伐 33 App->Service->Local Service Binding 绑定服务 ServiceConnection Binder

本例和下列Local Service Controller 的Activity代码都定义在LocalServiceActivities.Java 中,作为LocalServiceActivities 内部类实现的. 调用的Service为LocalService. LocalService既可以做为“Started” Service,也可以做为”Bound” Service. 一个“Bound” Service 可以通过Client/Service模式提供Service.它运行应用程序组件(比如

启动service和绑定service的区别

当我们启动service的时候首先会调用 onCreate():然后调用onStartCommand()方法:再次启动service的时候只会调用onStartCommand()方法:因为只有一个服务! 这时候如果我们返回主界面服务正常运行: 我们绑定service的时候也会调用 onCreate():但是不会调用onStartCommand(): 如果绑定了service我们返回主界面的时候服务会直接抛出异常,并且执行ondestory方法():

普通Service和绑定Service

需要先在Manifest文件中对MyService进行声明: <service android:name=".MyService" android:enabled="true"></service> Service代码: 1 package com.example.dbwater.myapplication; 2 3 import android.content.ComponentName; 4 import android.content.

adnroid四大组件之Service(5) 绑定服务,数据通信-IBinder

绑定服务: 第一步:创建一个服务类,实现onBind() 方法, 返回一个IBinder对象, 这个对象定义了与服务通信的接口,客户端接收到这个IBinder,与服务进行 通信.  IBinder的实现类通过一个 方法用来获取服务,和onTransact方法 与客户端进行通信. 第二步:在清单文件注册服务<service>  <service android:name="com.example.bindservicedemo.BindService"></

Activity与本地Service的绑定

在Android应用程序中,Activity负责界面的显示,Service负责后台工作,当然后台和界面是需要交互的,所以Activity需要和Service交互. 比较常用的是Activity和本地Service的交互,本文介绍的便是这种,最终实现Activity和Service都能很方便地调用对方的public方法. 其实只要让Activity和Service绑定之后,分别拥有对方的引用就可以了. 以MainActivity和MyService为例 创建一个服务类MyService.java

android 四大组件值Service(3) 绑定式服务

bound服务是指允许被应用程序组件绑定的服务,通过调用bindService()可以完成绑定,用于创建一个长期存在的连接(并且一般不再允许组件通过调用startService()来start服务. 当应用程序中的activity或其它组件需要与服务进行交互,或者应用程序的某些功能需要暴露给其它应用程序时,你应该创建一个bound服务,并通过进程间通信(IPC)来完成. 要创建一个bound服务,你必须实现onBind()回调方法,并返回一个IBinder对象,此对象定义了与服务进行通信的接口.

将自定义的 service provider 绑定到 IOC 容器

首先要有一些类,可以自己自定义一些类放在app/目录下的自己新建的文件夹,在类里面实现代码逻辑 然后通过命令生成serviceprovider   (php artisan make:provider    namepro)文件,存在APP/providers目录下,在provider文件中的register()方法中绑定要添加的类, 最后在config/app.php文件中注册serviceprovider类(这一步就相当于将自定义的类放到IOC容器了吧), 然后在文件的任何地方都可以用app