以 bind 方式创建与绑定 Service实例

通过前面的学习,可以发现使用 start方式开启 Service 非常简单,但是它有一个技大的弊端,没有办法与开启者进行通信。为了解决这个问题,我们一般会使用 bind方式来定 Service。以bind方式创建与绑定 Service 的步骤在之前也已讲述,此处将用一个实例来进行讲解。

1、创建一个继承Service 类的子类 MyService类,由于是采用 bind方式绑定Service, 因此 MyService 类与前文以start方式开启Service而创建的继承Service 类的子类有很大不同。

前文说过,采用此种方式绑定 Servce 时会回调 onBind()方法,此方法会返回一个IBind 类的对象。一般情况下,如果我们在某个Activity 中绑定了此 Service,就会从ServiceConnection 类 onServiceConnected(ComponentName name, IBinder service)方法中获取到 onBind()方法返回的IBind类的对象。Activity与Service可以进行通信,利用的就是这个IBind 类的对象。

所以,我们可以建立一个IBind类的子类,并在该类中封装 Service 对象,并在 onBind()方法中返回此类的对象。这样一来,在 Activity中就可以对 Service进行操作了。MyService类代码如下∶

package com.rfstar.servicetest2;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
    private String message;
    private boolean isrunning = true;
    private IBinder binder = new MyBinder();
    private MyService.ServiceThread serviceThread=new MyService.ServiceThread();
    private Thread thread;

    @Override
    public IBinder onBind(Intent intent) {
        Log.i("service", "onBind");
        thread = new Thread(serviceThread);
        //开启一个线程
        thread.start();
        /**返回一个可以在Activity的onServiceConnected()方法中接收的binder对象
         * 它是Activity和Service通信的桥梁
         * 在Activity中通过这个bind对象可以得到Service的实例引用
         * 通过获取的Service实例就可以调用相关方法和属性
         */
        return binder;
    }

    @Override
    public void onCreate() {
        Log.i("service", "oncreate");
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("service", "onStartCommand");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.i("service", "onUnbind");
        return super.onUnbind(intent);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        //结束run方法的
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.(1)什么是 SOA?SOA 有什么特点?请例举几种 SOA 的实例; (2)什么是 Web Service?简要说明 Web Services 中 Service 的含义。 答:(1)SOA 的定义:SOA(service-oriented architecture)被设计为提供这 样的灵活性:将业务过程以及下层的 IT 基础设施作为一个安全的、标准化的组 件 (即服务) ,这些组件可以通过被重用的方式来适应不断变化的业务优先级。 SOA 的特点有: 1)服务是自包含和模块化的 2)服务支持互操作 3)服务是松耦合的 4)服务是位置透明的 5)服务是由构件组成的合成模块 SOA 的实例: CORBA(Common Object Request Broker Architecture,公共对象请求 代理体系结构) DCOM(Distributed Component Object Model 分布式组件对象模型) J2EE WWW (2)Web Service 是一种用 URI 标识的软件应用,它的接口和绑定可以通过 XML 文档定义、描述和发现。Web Service 支持通过基于 Internet 的协议、并利用 基于 XML 的信息与其他软件进行直接的交互。 Service 的含义:应用程序或者业务的不同功能单元,这些功能单元作为一个独 立的实例存在, 并且通过松耦合、基于消息的通信模式和其他应用程序或者服务 进行交互。 2.(1)请给出 Web Services 的体系结构图(包含角色和行为的三角图),并简 述各角色和行为的含义。 (2)下图是 Web Services 的协议栈, 将其补充完整; 并简述栈中每一层的作用。 (1) 角色: 服务需求者(service requester):一个应用程序、软件模块或者需要服 务的另一个服务。 服务提供者(service provider):接受和执行服务使用者的请求的可寻 址的网络实体。 服务中介(service broker):包含一个可用服务库并且为感兴趣的服务 使用者提供服务提供者接口的查找。 Publish 发布:一个服务的描述只有被发布,该服务才可以被服务请求者发 现和调用。使用的协议是 WSDL。 Search 查找:服务请求者通过向服务注册中心查询来定位符合自己要求的 服务。使用的协议是 UDDI。 Bind Invoke 绑定和调用:服务请求者根据服务注册中心提供的服务描述信 息来调用服务。使用的协议是 SOAP。 (2) Web Service 协议栈中各层的作用: Discovery:服务发现层:服务请求者查询可以调用的服务。 Composition:服务组合层:组合 Web 服务,从而可以形成新的 Web 服务。 Service Description:服务描述层:为调用服务提供了具体的方法。包含服务 的接口和实现细节。 XML Messaging:XML 信息层:用于调用服务时传送信息。 Network: 网络传输层:采用广泛使用的协议传输消息,并且能够顺利通过代理防 火墙。 3.(1)什么是 WSDL?WSDL 定义了 service 的哪些个方面?分别对应于 WSDL 中的 哪些元素?WSDL 文档被分为哪两种类型? (2)请说明 binding 元素与 portType 之间的关系,为什么说 "Binding element is generic"? (1)WSDL 一种用来定义网络服务的 XML 格式,该 XML 格式将网络服务定义为一 组在信息的层次上操作的终端节点, 这些信息包含基于文档的信息和基于过程的 信息。 WSDL 定义了 Service 的以下三个方面: a.服务是什么(服务接口)。对应着 portType 与 message 和 type 元素。 b.访问规格(怎样使用服务)。对应着 binding 元素。 c.服务的位置(服务在哪里)。对应着 port 及 service 元素。 WDSL 文档分为以下两种类型: a. 服务接口 b. 服务实现 (2)一个 binding 元素为一个 portType 描述了一个特定的的通信协议。每个 binding 与一个 portType 对应,binding 元素描述了 portType 中每个操作里面 每个消息的具体通信协议。 Binding element is generic(Binding 元素是泛化的)因为它只是简单地 定义了描述绑定细节的框架。 实际的绑定细节通过使用扩展元素的方式提供。这 种架构允许 WSDL 随着时间的推移逐步演化, 因为元素可以在预定义的 slot 中使 用。 4.下面给出的代码段是一个功能块的 JAVA 语言描述,请给出该描述的 WSDL 描述

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值