Service 启动方式有两种

  • startService(intent)
  • bindService(intent,conn,Context.BIND_AUTO_CREATE)

startService(intent)

  生命周期: onCreate()-  >onStartCommand()->startService()->onDestroy()

  该方法启动service,会执行一个onStartCommand()的方法,所以一些操作可以放在 onStartCommand() 中进行处理。

bindService(intent,conn,Context.BIND_AUTO_CREATE)

  生命周期:onCreate()->onBind()->onUnbind()->onDestroy()

  绑定启动 service,

使用该方法启动 service 分为几步

1.在 Service 中,重写 onBind() 方法,返回一个 iBinder 对象。

     @Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
Log.d("learnservice", "绑定服务...");
return new MyBinder();
}

2.新建 BinderService 类继承 Service ,在 BindService 类里新建内部类 MyBinder 继承Binder ( Binder 实现 IBinder 接口)。该类中实现一些与 service 通信的方法,比如 setData()方法。

     public class MyBinder extends Binder{
public void setData(String data){
MyService.this.data=data;
}
}

3.在 Activity 里,实例化 ServiceConnection 接口的实现类,重写 onServiceConnected() 和 onServiceDisconnected() 方法。

 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
binder=(MyBinder) service; //该binder,需要在activity中声明。
Log.d("learnservice", "绑定服务conn...");
}
};

4.使用 button 的 onClick() 或者 activity 的 onCreat() 等触发 bindService() 方法

     @Override
public void onClick(View v) {
intent = new Intent(MainActivity.this,MyService.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
5 }

5.在 activity 中声明 service中的binder

 private MyService.MyBinder binder;

6.同时把该 binder 放在 serviceConnection 的 onServiceConnection() 方法中

 binder=(MyBinder) service;

这样,就完成了 Activity 和 Service 通过 bindService() 方法绑定并通信。

Android开发之bindService()通信的更多相关文章

  1. Android 开发之 bindService() 通信

    Service 启动方式有两种 startService(intent) bindService(intent,conn,Context.BIND_AUTO_CREATE) startService( ...

  2. Android开发之bindService()侦听service内部状态

    在Android开发之bindService()通信的基础上,实现bindService()方法侦听service内部状态. 实现侦听service内部状态,使用的是回调机制 1.首先实现一个接口 p ...

  3. Android开发之旅4:应用程序基础及组件

    引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...

  4. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  5. [置顶] Android开发之MediaPlayerService服务详解(一)

    前面一节我们分析了Binder通信相关的两个重要类:ProcessState 和 IPCThreadState.ProcessState负责打开Binder 驱动,每个进程只有一个.而 IPCThre ...

  6. [置顶] Android开发之serviceManager分析

    Android 开发之serviceManager分析 在Android系统中用到最多的通信机制就是Binder,Binder主要由Client.Server.ServiceManager和Binde ...

  7. Android开发之旅5:应用程序基础及组件

    引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...

  8. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

  9. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

随机推荐

  1. C#变量初始化问题:字段初始值无法引用非静态字段、方法或属性

    http://www.cnblogs.com/bluestorm/p/3432190.html 问题:字段初始值设定项无法引用非静态字段.方法或属性的问题 下面代码出错的原因,在类中定义的字段为什么不 ...

  2. 19_高级映射:一对多查询(使用resultMap)

    [需求] 查询订单以及订单明细的信息. 确定主查询表:订单表orders 确定关联查询表:订单明细表 orderdetail 在一对一查询的基础上添加订单明细表关联即可. [分析] 使用resultM ...

  3. FlatBuffers

    1 What is FlatBuffers. FlatBuffers is a serialization library for games and other memory constrained ...

  4. 责任链模式(Chain of Responsibility Pattern)

    责任链模式:可以为某个请求创建一个对象链.每个对象依序检查此请求,并对其处理,或者把它传给链中的下一个对象. 责任链上的对象负责处理请求,客户只需要将请求发送到责任链上即可,无需关心处理的细节和请求的 ...

  5. Asp.net自带导出方法

    ///datatable数据源 filename绝对路径 如:E:\\***.xls DataTable.WriteXml(fileName)

  6. MAC 上找不到.bash_profile或者ect/profile该怎么办?

      开发Android的环境要重新在Mac上搭建,结果在配置环境变量时找不到.bash_profile文件.查过很多资料解决方案都很笼统,结果还是在英文网站上找到解决方法. 1. 启动终端Termin ...

  7. Chrome 浏览器各版本下载大全

    随着最近64位版本的 Chrome 浏览器正式版的推出,Chrome 浏览器再次受到广大浏览迷的重点关注,今天我们就整理一下各版本的 Chrome 浏览器 32位及64位的下载地址,方便各位浏览迷选择 ...

  8. WPF学习笔记3——Layout之1

    一.概述 了解XAML的基本之后,进入Layout的学习.Layout,即布局,可能需要用到几种不同的容器.每一种容器都有各自的逻辑.在用户界面的设计过程中,很多时候是在想办法使得界面更加吸引.实在. ...

  9. Codeforces Round #345 (Div. 1) A. Watchmen 模拟加点

    Watchmen 题意:有n (1 ≤ n ≤ 200 000) 个点,问有多少个点的开平方距离与横纵坐标的绝对值之差的和相等: 即 = |xi - xj| + |yi - yj|.(|xi|, |y ...

  10. hdu 4542 小明系列故事——未知剩余系

    小明系列故事——未知剩余系 题意:操作0表示某数有n个约数,操作1为某数有n个非约数:n <= 47777,若是存在小于2^62的数符合,则输出该数,否则若是不存在输出Illegal,若是大于2 ...