Service组件简介
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组件简介的更多相关文章
- (转)Web Service入门简介(一个简单的WebService示例)
Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...
- Web Service入门简介(一个简单的WebService示例)
Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...
- Android Service组件(1)
android service 和其他服务一样,并没有实际运行的界面,它运行在android 后台.一般通过service为应用程序提供服务(比如,从Internet下载文件,控制音乐播放器等).Se ...
- Android笔记二十七.Service组件入门(一).什么是Service?
转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.Service 1.Service简单介绍 Service为Android四大组件之中 ...
- web service 组件
web service 组件 基本的 web service 平台是 XML + HTTP.所有标准的 web service 使用以下组件: SOAP(简单对象访问协议) UDDI(通用描述.发现与 ...
- Netty 源码(一)Netty 组件简介
Netty 源码(一)Netty 组件简介 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一.Netty 架构 Core: ...
- Android中的Service组件具体解释
Service与Activity的差别在于:Service一直在后台执行,他没实用户界面,绝不会到前台来. 一,创建和配置Service 开发Service须要两个步骤:1.继承Service子类,2 ...
- 任何应用程序都可拥有 Web Service 组件。
任何应用程序都可拥有 Web Service 组件. Web Service 的创建与编程语言的种类无关. 本章节我们将为大家介绍使用 PHP 的 SOAP 扩展来创建 Web Service. SO ...
- amazeui学习笔记二(进阶开发2)--Web组件简介Web Component
amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...
随机推荐
- Web服务器控件之button
button有两种类型的按钮,一种是提交按钮,一种是命令按钮.只说命令按钮. 命令按钮事要使用两个属性,分别是CommandName和CommandArguement属性,当该按钮被点击时,将页面中的 ...
- 代码自定义双色title的按钮
所图所示,通过代码自定义这样的按钮. .h文件 // // CustomButtom.h // testPlus // // Created by 鹰眼 on 14/10/20. // Copyrig ...
- 达梦7的试用 与SQLSERVER的简单技术对比
达梦7的试用 与SQLSERVER的简单技术对比 达梦数据库公司推出了他们的数据库服务管理平台,可以在该平台使用达梦数据库而无须安装达梦7数据库 地址:http://online.dameng.com ...
- Windows环境安装Linux系统及JDK部署
前言 由于我的笔记本有点问题,所以这周系统包括所有硬盘全部重装了,原来的Linux虚拟机都没了,因此才有了这篇文章和各位朋友们分享. 由于Linux环境的优越性(开源.低成本.安全性好.网络功能强大) ...
- 在C#代码中应用Log4Net(一)简单使用Log4Net
首先让我们先把Log4Net跑起来,示例代码在文章最后面可以下载 1.先把Log4Net引入到工程中,为了演示方便,我们先建立一个winform程序.在程序的根目录下面,建立一个Libs文件夹,以便存 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (11) -----第三章 查询之异步查询
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第三章 查询 前一章,我们展示了常见数据库场景的建模方式,本章将向你展示如何查询实体 ...
- JavaScript学习笔记之Object
对象(object)是JavaScript的核心概念,也是最重要的数据类型.JavaScript的所有数据都可以被视为对象. 简单说,所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-va ...
- <canvas>设置宽高遇到的问题
在使用<canvas>元素时必须设置宽度和高度,指定可以绘画的区域大小.但是这里设置宽度和高度的时候有一个小问题. 样例代码: <!DOCTYPE html> <html ...
- 循序渐进,了解Hive是什么!
一直想抽个时间整理下最近的所学,断断续续接触hive也有半个多月了,大体上了解了很多Hive相关的知识.那么,一般对陌生事物的认知都会经历下面几个阶段: 为什么会出现?解决了什么问题? 如何搭建?如何 ...
- 简单了解JS 中的indexOf方法
indexOf() 方法返回指定值在字符串对象中首次出现的位置.从 fromIndex 位置开始查找,如果不存在,则返回 -1. 首先先看下MDN下的参考文档,文档里列出的很详细,这里我只列出了注意点 ...