【转】 Pro Android学习笔记(七九):服务(4):远程服务的实现
文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处:http://blog.csdn.net/flowingflying/
在上一学习中,我们已经用AIDL定义了Remote Service对外暴露的接口。在编译时,系统会根据AIDL自动生成接口的java文件IStockQuoteSerivce.java,在这个文件中,定义了IStockQuoteService.Stub抽象类,通过继承Binder,实现服务和client之间的传递,通过实现IStockQuoteService,具有服务的接口。
public static abstract class Stub extends android.os.Binder implements IStockQuoteService
Stub是远程服务的关键,从代码中可以推测:stub可以实现client和service之间的请求和结果的传递,service在onBind()中将stub对象返回给client,client对stub对象的操作,就如同操作service的对外接口。
远程服务的实现小例子
继续StockQuote的小例子,下面是远程服务的实现代码。
public class StockQuoteRemoteService extends Service {
private static int count = 0;
/* IStockQuoteService接口文件中含有一个抽象类Stub,在remote service定义内部类继承Stub,具体实现远程服务所要完成的服务内容,具体实现接口代码。本例模拟回复double的股值 */
private class StockQuoteRemoteServiceImpl extends IStockQuoteService.Stub{
@Override
public double getQuote(String ticker) throws RemoteException {
Log.v("Service Stub","getQuote is called, ticker is " + ticker);
return 20.0 + (++ count);
}
}
@Override //service初始化
public void onCreate() {
super.onCreate();
Log.v("RemoteService","onCreate() is called");
}
@Override //service结束
public void onDestroy() {
Log.v("RemoteService","onDestory() is called");
super.onDestroy();
}
@Override //在client通过bindService()请求远程服务时,远程服务触发onBind(),将Stub对象返回给连接
public IBinder onBind(Intent intent) {
Log.v("RemoteService","onBind() is called, intent " + intent);
return new StockQuoteRemoteServiceImpl();
}
}
对外开放远程服务的接口
在AndroidManifest.xml文件中要定义service,允许其他应用通过intent调用相关服务。
<?xml version="1.0" encoding="utf-8"?>
<manifest … >
… …
<application ...>
… …
<service android:name="StockQuoteRemoteService">
<intent-filter>
<!-- 需要通过intent-filter对外暴露service的接口 -->
<action android:name="cn.wei.flowingflying.proandroidservice.IStockQuoteService" />
</intent-filter>
</service>
</application>
</manifest>
对于一个remote service,并不需要activity,不需要activity launch。部署方式和activity一样即可。
本笔记涉及的例子代码,可以在Pro Android学习:Android service小例子中下载。
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(七九):服务(4):远程服务的实现的更多相关文章
- 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...
- 【转】 Pro Android学习笔记(九二):AsyncTask(1):AsyncTask类
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在Handler的学习系列中,学习了如何h ...
- 【转】 Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Progress Dialog小例子 我们 ...
- 【转】 Pro Android学习笔记(九三):AsyncTask(2):小例子
目录(?)[-] 继承AsyncTask UI操作接口 使用AsyncTask 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn. ...
- 【转】Pro Android学习笔记(九):了解Content Provider(下下)
Content provider作为信息的读出,比较常见的还有文件的读写,最基础的就是二进制文件的的读写,例如img文件,音频文件的读写.在数据库中存放了该文件的路径,我们可以通过ContentPro ...
- 【转】 Pro Android学习笔记(九一):了解Handler(5):组件生命
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 对于activity,消息是在OnCrea ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView
目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...
- 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout
目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...
随机推荐
- php header, 允许ajax跨域访问
<?php header('content-type:application:json;charset=utf8'); header('Access-Control-Allow-Origin:* ...
- ElasticSearch(二十一)正排和倒排索引
1.区别 搜索的时候,要依靠倒排索引:排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values 在建立索引的时候,一方面会建立 ...
- kettle连接资源库设置
到这里你是登陆不上去的,需要创建或更新按钮,因为需要在你的数据库里创建关于kettle的数据表,来存储资源库 点执行就可以了 一般情况下kettle资源库自动给你创建两个用户: 工具->资源库- ...
- GitHub提示 Error: Key already in use解决办法
GitHub提示 Error: Key already in use解决办法GitHub提示 Error: Key already in use解决办法2014年09月05日 ⁄ 综合 ⁄ 共 290 ...
- Java实现时间日期格式转换示例
package com.hanqi.util; import java.text.ParseException; import java.text.SimpleDateFormat; import j ...
- R语言图形base系统(一)
一般R作图有三大绘图系统:base系统.ggplot2绘图系统.lattice绘图系统. 本篇主要介绍base系统绘图时的图形参数.一般用plot()函数来完成.在R中,若 ...
- zend 和 esftp插件开发大型PHP项目,ZEND最常用快捷键
先说一下如何安装zend的esftp插件,下载插件esftp-1.1.1.zip,下载地址http://sourceforge.net/projects/esftp/ 或者 http://yun.ba ...
- vo优化总结
问题1:位姿估计用的ransac,只用了几个点,如果3d_2d点存在噪声,不行.优化:把这值当做初值,用非线性优化问题2:深度图有误差,深度过近或过远不行,有误差.而特征点往往在物体边缘处,深度测量值 ...
- Shiro-自定义realm
Shiro自定义 realm package com.zhen.realm; import org.apache.shiro.authc.AuthenticationException; import ...
- 英语发音规则---th
英语发音规则---th 一.总结 一句话总结: th发/ð/音的情况:a.在th后以字母-er结尾的单词中:b.在代词.冠词.介词.连词或副词中的字母组合th th发/θ/音的情况:a.在数词(包括基 ...