Service是一个应用程序组件,没有图形化界面,通常用来处理一些耗时较长的操作,可以用Service更新ContentProvider,发送Intent以及启动系统的通知等等。Service并不是一个单独的进程,也不是一个线程。

  绑定Service和启动Service的区别:

一个Activity启动一个Service之后不能去控制Service的过程和结果,但是实现简单,实现代码如下:

   首先声明一个名为FirstService的类,此类继承自Service类,然后复写Service类的onCreate()、onStartCommand()、onDestroy()方法,如果是首次启动该Service则会调用onCreate()方法和onStartCommand()方法,否则只调用onStartCommand()方法,如果停止该Service则会调用该Service的onDestroy()方法。

  ServiceActivity中启动Service的代码如下:

    Intent intent = new Intent();
    intent.setClass(ServiceActivity.this, FirstService.class);
    startService(intent);

  ServiceActivity中停止Service的代码如下:

    Intent intent = new Intent();
    intent.setClass(ServiceActivity.this, FirstService.class);
    stopService(intent);

绑定Service提供了一种客户端和服务器的模式,通过这种模式Activity可以向Service发送请求,Service可以向Activity返回响应。

  首先在ServiceActivity中声明一个ServiceConnection类的对象conn用来绑定Service和Activity,然后在FirstActivity中声明一个MyBinder类继承自Binder类,复写Binder类的onTransact()方法,当ServiceActivity中获得的FirstService类返回的binder对象执行transact(code,data,reply,flags)方法时。同时执行FirstService类中MyBinder类的onTransact()方法。

  声明ServiceConnection类的对象conn:

    ServiceConnection conn = new ServiceConnection() {
      @Override
      public void onServiceDisconnected(ComponentName name) {
        // TODO Auto-generated method stub
      }
      @Override
      public void onServiceConnected(ComponentName name, IBinder service) {
        // TODO Auto-generated method stub
        //当绑定成功时,将SecondService返回的binder对象赋值给ServiceActivity的binder对象
        ServiceActivity.this.binder = (Binder)service;
      }
    };

  绑定Service详细代码如下:

    Intent intent = new Intent();
    intent.setClass(ServiceActivity.this, FirstService.class);
    bindService(intent, conn, BIND_AUTO_CREATE);

    ServiceActivity向FirstService发送响应请求和FirstService响应ServiceActivity的请求:

    //生成Parcel对象,Parcel对象就像一个数据集,可以传载数据
    Parcel data = Parcel.obtain();
    data.writeString("from Activity data");
    //此时声明的Parcel对象reply中的数据为空
    Parcel reply = Parcel.obtain();
    try {
      //data中是数据,当执行此方法执行时,同时会执行FirstService中的MyBinder对象的onTransact()方法
      binder.transact(0, data, reply, 0);
      String str = reply.readString();
      Log.d("MyDebug", str);
    } catch (RemoteException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  FirstService类中MyBinder对象的声明如下,需要复写该类的onTransact()方法:

    class MyBinder extends Binder{

    @Override
    protected boolean onTransact(int code, Parcel data, Parcel reply,int flags) throws RemoteException {
      // TODO Auto-generated method stub
      //将ServiceActivity中传递过来的数据取出
      String str = data.readString();
      Log.d("MyDebug", str);
      reply.writeString("reply Service reply");
      return super.onTransact(code, data, reply, flags);
    }

  FirstService类中的onBind()方法需返回MyBinder对象,定义如下:

    @Override
    public IBinder onBind(Intent intent) {
      // TODO Auto-generated method stub
      return new MyBinder();
    }

Service组件简介的更多相关文章

  1. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  2. Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  3. Android Service组件(1)

    android service 和其他服务一样,并没有实际运行的界面,它运行在android 后台.一般通过service为应用程序提供服务(比如,从Internet下载文件,控制音乐播放器等).Se ...

  4. Android笔记二十七.Service组件入门(一).什么是Service?

    转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.Service 1.Service简单介绍     Service为Android四大组件之中 ...

  5. web service 组件

    web service 组件 基本的 web service 平台是 XML + HTTP.所有标准的 web service 使用以下组件: SOAP(简单对象访问协议) UDDI(通用描述.发现与 ...

  6. Netty 源码(一)Netty 组件简介

    Netty 源码(一)Netty 组件简介 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一.Netty 架构 Core: ...

  7. Android中的Service组件具体解释

    Service与Activity的差别在于:Service一直在后台执行,他没实用户界面,绝不会到前台来. 一,创建和配置Service 开发Service须要两个步骤:1.继承Service子类,2 ...

  8. 任何应用程序都可拥有 Web Service 组件。

    任何应用程序都可拥有 Web Service 组件. Web Service 的创建与编程语言的种类无关. 本章节我们将为大家介绍使用 PHP 的 SOAP 扩展来创建 Web Service. SO ...

  9. amazeui学习笔记二(进阶开发2)--Web组件简介Web Component

    amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...

随机推荐

  1. Web服务器控件之button

    button有两种类型的按钮,一种是提交按钮,一种是命令按钮.只说命令按钮. 命令按钮事要使用两个属性,分别是CommandName和CommandArguement属性,当该按钮被点击时,将页面中的 ...

  2. 代码自定义双色title的按钮

    所图所示,通过代码自定义这样的按钮. .h文件 // // CustomButtom.h // testPlus // // Created by 鹰眼 on 14/10/20. // Copyrig ...

  3. 达梦7的试用 与SQLSERVER的简单技术对比

    达梦7的试用 与SQLSERVER的简单技术对比 达梦数据库公司推出了他们的数据库服务管理平台,可以在该平台使用达梦数据库而无须安装达梦7数据库 地址:http://online.dameng.com ...

  4. Windows环境安装Linux系统及JDK部署

    前言 由于我的笔记本有点问题,所以这周系统包括所有硬盘全部重装了,原来的Linux虚拟机都没了,因此才有了这篇文章和各位朋友们分享. 由于Linux环境的优越性(开源.低成本.安全性好.网络功能强大) ...

  5. 在C#代码中应用Log4Net(一)简单使用Log4Net

    首先让我们先把Log4Net跑起来,示例代码在文章最后面可以下载 1.先把Log4Net引入到工程中,为了演示方便,我们先建立一个winform程序.在程序的根目录下面,建立一个Libs文件夹,以便存 ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (11) -----第三章 查询之异步查询

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第三章 查询 前一章,我们展示了常见数据库场景的建模方式,本章将向你展示如何查询实体 ...

  7. JavaScript学习笔记之Object

    对象(object)是JavaScript的核心概念,也是最重要的数据类型.JavaScript的所有数据都可以被视为对象. 简单说,所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-va ...

  8. <canvas>设置宽高遇到的问题

    在使用<canvas>元素时必须设置宽度和高度,指定可以绘画的区域大小.但是这里设置宽度和高度的时候有一个小问题. 样例代码: <!DOCTYPE html> <html ...

  9. 循序渐进,了解Hive是什么!

    一直想抽个时间整理下最近的所学,断断续续接触hive也有半个多月了,大体上了解了很多Hive相关的知识.那么,一般对陌生事物的认知都会经历下面几个阶段: 为什么会出现?解决了什么问题? 如何搭建?如何 ...

  10. 简单了解JS 中的indexOf方法

    indexOf() 方法返回指定值在字符串对象中首次出现的位置.从 fromIndex 位置开始查找,如果不存在,则返回 -1. 首先先看下MDN下的参考文档,文档里列出的很详细,这里我只列出了注意点 ...