`
_小菜鸟
  • 浏览: 34056 次
社区版块
存档分类
最新评论

我的android 第37天 -服务--Service(二)

 
阅读更多

我的android 第37天 -服务--Service(二)

 

 

建立能与Activity进行相互通信的本地服务

 

通过startService()stopService()启动关闭服务。适用于服务和Activity之间没有调用交互的情况。如果相互之间需要方法调用或者传递参数,需要使用bindService()unbindService()方法启动关闭服务。

 

采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法,这个时候调用者和服务绑定在一起。如果客户端要与服务进行通信,那么,onBind()方法必须返回Ibinder对象。如果调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。

 

Activity与服务进行通信,开发人员通常把通信方法定义在接口里,然后让Ibinder对象实现该接口,而Activity通过该接口引用服务onBind()方法返回的Ibinder对象,然后调用Ibinder对象里自定义的通信方法。例子如下:

 

本例是一个本地服务,即服务与Activity在同一个应用内部。

接口:

publicinterface ICountService {

  public int getCount();

}

服务类:

publicclass CountServiceextends Service {

privatebooleanquit;

privateintcount;

privateServiceBinder serviceBinder =new ServiceBinder();

 

publicclass ServiceBinderextends Binder implements ICountService {

  @Override

  public int getCount() {

  return count;

  }

}

@Override

publicIBinder onBind(Intentintent) {

  return serviceBinder;

}

@Override

publicvoid onCreate() {

  super.onCreate();

  new Thread(new Runnable() {

  @Override

  public void run() {

  while (!quit) {

      try{

  Thread.sleep(1000);

      }catch (InterruptedException e){}

     count++;

  }

  }

  }).start();

}

 

@Override

publicvoid onDestroy() {

  super.onDestroy();

  this.quit =true;

}

}

客户端Activity

publicclass ClientActivityextends Activity {

  private ICountService countService;

 

  @Override

  public void onCreate(BundlesavedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  this.bindService(newIntent(this, CountService.class), this.serviceConnection,BIND_AUTO_CREATE);

  }

 

  @Override

  protected void onDestroy() {

  super.onDestroy();

  this.unbindService(serviceConnection);

  } 

 

  private ServiceConnection serviceConnection =new ServiceConnection() {

  @Override

  public void onServiceConnected(ComponentNamename, IBinderservice) {

  countService = (ICountService)service;//对于本地服务,获取的实例和服务onBind()返回的实例是同一个

  int i = countService.getCount(); 

  Log.v("CountService","Count is " + i);

  }

  @Override

  public void onServiceDisconnected(ComponentNamename) {

  countService =null;

  }

  };

}

下载视频代码

分享到:
评论

相关推荐

    android应用开发详解 郭宏志编著 pdf格式

    第一篇 基础篇 第一章 android概述 第二章 android开发基础 第二篇 技术篇 第三章 android中的资源访问 第四章 android用户界面 ...第十七章 android应用案例--备忘录 第十八章 android应用案例--无线点餐系统

    老罗android开发视频教程全集百度网盘下载

    【第一版第三章】老罗Android开发视频--HTTP协议编程(4集) 【第一版第四章】老罗Android开发视频--解析XML数据(3集) 【第一版第五章】老罗Android开发视频--解析JSON数据(4集) 【第一版第六章】老罗Android...

    android一步一步最基础学习__新手

    第一讲:Android开发环境的搭建 第二讲:Android系统构架分析和应用程序目录结构分析 第三讲:Android模拟器的使用 emulator 第四讲:Activity入门指南 Activity ...第三十讲:URLConnection和HttpClient使用入门

    Android开发案例驱动教程 配套代码

    《Android开发案例驱动教程》 配套代码。 注: 由于第12,13,14章代码太大,无法上传到一个包中。 这三节代码会放到其他压缩包中。 作者:关东升,赵志荣 Java或C++程序员转变成为Android程序员 采用案例驱动模式...

    8天快速掌握Android教程源码

    04_开发与运行(卸载)第一个ANDROID应用.avi 所在项目:Hello 06_电话拔号器.avi 所在项目:phone 08_短信发送器.avi 所在项目:sms 09_深入了解各种布局技术.avi 所在项目:sms & FrameLayout 10_对应用进行单元...

    疯狂android讲义源代码.7z.001(共三卷)

    第一章android应用与开发环境 第二章android应用的界面编程 第三章事件处理 第四章深入理解activity 第五章使用intent和intentFilter进行通信 ...第十七章使用GoogleMap服务 第十八章疯狂连连看 第十九章电子拍卖系统

    疯狂android讲义源代码.7z.003(共三卷)

    第一章android应用与开发环境 第二章android应用的界面编程 第三章事件处理 第四章深入理解activity 第五章使用intent和intentFilter进行通信 ...第十七章使用GoogleMap服务 第十八章疯狂连连看 第十九章电子拍卖系统

    疯狂android讲义源代码.7z.002(共三卷)

    第一章android应用与开发环境 第二章android应用的界面编程 第三章事件处理 第四章深入理解activity 第五章使用intent和intentFilter进行通信 ...第十七章使用GoogleMap服务 第十八章疯狂连连看 第十九章电子拍卖系统

    《Google Android开发入门与实战》.pdf

    第14章 android综合案例三——基于android的豆瓣网(web 2.0)移动客户端开发 260 14.1 关于豆瓣网和豆瓣网api 260 14.1.1 豆瓣网介绍 260 14.1.2 豆瓣网api介绍 261 14.1.3 豆瓣网api认证 261 14.1.4...

    android知识大总结【邯院】

    第三章 电话拨号器和发送短信小程序 12 第四章 日志输出和单元测试 17 第五章 数据的存储与访问 19 第六章 SD卡的存取和XML读取 24 第七章 SharedPreferences进行数据存储 38 第八章 SQLITE数据库 42 第九章 ...

    ArcGIS for Android 2.0开发教程

    第三章. 创建第一个HelloWorld Map 12 1. 创建项目 12 2. 项目结构 14 3. 编码实现 16 第四章. 地图、图层及空间参考 . 18 1. MapView地图组件 18 2. 地图图层(Layer) 21 3. SpatialReference . 26 第五章...

    一本android的好书beginning android 2 和 源码

    android好书系列,我目前找了两本,先贡献给大家。以后如果有好的资源,再上传和大家分享。 本资源是第一本。 这是一本学习android的好书,我浏览了,是老外著的,高清晰的pdf。为了方便大家学习android,我将本书所...

    pcf8563_i2c1_r8_ruoge_ov2640通过给RTC驱动增加设备节点读取秒钟成功+直接读取I2C1获取秒钟值20160626_2201.7z

    root@android:/dev # cd /sys/class/i2c-adapter/ root@android:/sys/class/i2c-adapter # ll lrwxrwxrwx root root 1970-01-02 08:31 i2c-0 -> ../../devices/platform/sun5i-i2c.0/i2c-0 lrwxrwxrwx root root ...

    《Android开发从零开始视频教程》下载地址

    [Android开发从零开始].37.Spinner和Auto.Complete控件学习.mp4 52.7MB [Android开发从零开始].38.WebView控件学习.mp4 70.6MB [Android开发从零开始].39.Dialogs学习.mp4 59.9MB [Android开发从零开始].40....

    Android天气预报widget的设计与实现毕业论文

    第2章 ANDROID开发环境 3 2.1 ANDROID开发环境搭建流程 3 2.1.1 安装Eclipse ADT Plugin插件 3 2.1.2 安装Android SDK 4 2.1.3 更新Adroid SDK 5 2.1.4 配置Android模拟器 6 2.2 开发工具ECLIPSE介绍 7 第3章 ...

    传智播客的android开发源代码

    04_开发与运行(卸载)第一个ANDROID应用.avi 所在项目:Hello 06_电话拔号器.avi 所在项目:phone 08_短信发送器.avi 所在项目:sms 09_深入了解各种布局技术.avi 所在项目:sms & FrameLayout 10_对应用进行单元...

    Google Android开发入门与实战的代码

    第14章 Android综合案例三——基于Android的豆瓣网(Web 2.0)移动客户端开发 260 14.1 关于豆瓣网和豆瓣网API 260 14.1.1 豆瓣网介绍 260 14.1.2 豆瓣网API介绍 261 14.1.3 豆瓣网API认证 261 14.1.4...

Global site tag (gtag.js) - Google Analytics