Bind Service原理及例子

startService有个致命的弱点,startService无法将service运算的结果返回给activity,bindService正是解决这一问题
作为一个bindService他是充当服务器端的,其他的组件是充当客户端的,在activity中可以得到service运行的一些基本的情况

public class MainActivity extends Activity {

  private Button button1;
  private Button button2;
  private Binder binder;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button1 = (Button)findViewById(R.id.button1);
    button2 = (Button)findViewById(R.id.button2);
    button1.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        Intent intent = new Intent();
        intent.setClass(MainActivity.this, SecondService.class);
        bindService(intent, conn, BIND_AUTO_CREATE);
      }
    });
    //transact和onTransact activity向service发送消息,service向activity返回消息
    button2.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();
        data.writeString("data from activity");
        try {
          binder.transact(0, data, reply, 0);
          String string = reply.readString();
          System.out.println("activity ---"+string);
        } catch (RemoteException e) {
          e.printStackTrace();
        }
      }
    });
  }

  ServiceConnection conn = new ServiceConnection() {
    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
      binder = (FirstBinder)service;
      String data = ((FirstBinder) binder).getData();
      System.out.println("data -->daya"+data);
    }
  };
}

public class SecondService extends Service {

//当其他的应用程序组件(activity)绑定至当前的service时,将会调用该方法
  @Override
  public IBinder onBind(Intent intent) {
    IBinder binder = new FirstBinder();
    return binder;
  }

  class FirstBinder extends Binder {

    @Override
    protected boolean onTransact(int code, Parcel data, Parcel reply,
      int flags) throws RemoteException {
      System.out.println("code - >"+code);
      String dataString = data.readString();
      System.out.println("datastring = "+dataString);
      reply.writeString("reply from service");
      return super.onTransact(code, data, reply, flags);
    }

    public String getData() {
      return "test data";
    }
  }
}

时间: 2024-12-26 06:15:57

Bind Service原理及例子的相关文章

android系统自带的Service原理与使用

1. 说明 android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如 MountService监听是否有SD卡安装及移除,ClipboardService提供剪切板功能,PackageManagerService提 供软件包的安装移除及查看等等,应用程序可以通过系统提供的Manager接口来访问这些Service提供的数据,以下将说明他们的工具流程 2. 举例说明基本流程 以android系统支持sensor(传感器)实例来说明框架层

通过Ibinder类Bind service

Binder is like RPC in java. It enables multi-processes communication. Now we will talking about how to bind service using IBinder class. 总共有3种bind service方法: 1.使用IBinder class 2.使用Messanger class 3.使用AIDL 这里只讨论IBinder class方法. 用IBinder class 来bind se

android中fragment与activity之间通信原理以及例子

参考文章 http://blog.csdn.net/guozh/article/details/25327685#comments Activity和fragment通信方式一般有3种方法 1.在fragment中定义接口, Activity去实现接口--->查看上面的参考文章 2.使用广播机制 3.使用EventBus 这3种方式 推荐使用EventBus 下面介绍第2种方式广播通信机制: 首先MainActivity中引入一个fragment, activity的布局很简单,里面只有一个 f

Android Bound Service(一) ----- Extending Binder Service(进程内绑定Service的简单例子)

ref:http://developer.android.com/guide/components/bound-services.html? 前言 重新学习这一项技术,主要的原因,是因为以前没有好好的学,那时总觉得作品能动,能完成工作就好了,而这种得过且过的想法,大大地影响了我的技术程度,也因此,在这个这个博客里,有许多的复习心得.有幸得到一位前辈的指导,指出,若只是学习,而无实际应用,这样进步会较少,因此,最好要多看源码,并且自己多尝试多实践,这样学习一万小时,应该能有小进步,因此开始了 Bo

js闭包原理与例子[转]

闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.闭包原理: 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. function f

web service 原理

Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP在 Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册. XML:(Extensible Markup Language)扩展型可标记语言.面向短期的临时数据处理.面向万维网络,是Soap的基础. Soap:(Simple Object Acce

servlet其工作原理和例子证明

servlet简单介绍 当我们在地址栏里面输入www.baidu.com,终于呈如今我们面前的是百度搜索的页面.在这些訪问过程中,都会有一个webserver来处理这些请求以及訪问处理后的结果. 而servlet就是这样一个用来处理前端请求并处理数据来返回相关数据到界面显示的工具.用以下一张图来表示这样一个过程. 原理简单介绍 对于servlet,它的工作原理也是能够去了解一下的.浏览器依据ip地址.向指定的server发送一个请求.在请求的过程中.依据http协议将请求数据封装成一个数据包.

分布式系统(2)---Web Service原理

众所周知,异构系统之间使用Web Service比较合适,上面一篇介绍了EJB,EJB是业务逻辑的分布式,是系统内部的调用.而Web Service比较适合用于系统间的调用. 什么需要用到WebService,举例说明: 比如说天气预报,股市,地图等都是需要从互联网上的其他系统服务器获取的,它向外界暴露出一个能够通过Web进行调用的API,通过API去获取数据. 实时天气预报: Web Service定义 Web Service提供了一个在不同的应用和平台之间的交互操作标准.这个交互操作通过一系

Web Service简单入门例子

我们一般实现Web Service的方法有很多种.其中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决每个问题而提供的在线服务方案,其主要采用了SOAP(Simple Object Access Protocol)协议,数据传输格式使用XML格式来描述,因此也具有跨平台的特性. web广泛用到的技术: TCP/IP:通用网络协议,被各种设备使用 HTML(标准通用标记语言下的一个应用):通用用户界面,可以使用HTML标签显示数据 Java:写一