目录(?)[-]

  1. 远程服务的实现小例子
  2. 对外开放远程服务的接口

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处: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):远程服务的实现的更多相关文章

  1. 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...

  2. 【转】 Pro Android学习笔记(九二):AsyncTask(1):AsyncTask类

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在Handler的学习系列中,学习了如何h ...

  3. 【转】 Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Progress Dialog小例子 我们 ...

  4. 【转】 Pro Android学习笔记(九三):AsyncTask(2):小例子

    目录(?)[-] 继承AsyncTask UI操作接口 使用AsyncTask 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn. ...

  5. 【转】Pro Android学习笔记(九):了解Content Provider(下下)

    Content provider作为信息的读出,比较常见的还有文件的读写,最基础的就是二进制文件的的读写,例如img文件,音频文件的读写.在数据库中存放了该文件的路径,我们可以通过ContentPro ...

  6. 【转】 Pro Android学习笔记(九一):了解Handler(5):组件生命

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 对于activity,消息是在OnCrea ...

  7. 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET

    目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...

  8. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  9. 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView

    目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...

  10. 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout

    目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...

随机推荐

  1. Feign-独立使用-实战

    目录 写在前面 1.1.1. 短连接API的接口准备 1.1.2. 申明远程接口的本地代理 1.1.3. 远程API的本地调用 写在最后 疯狂创客圈 亿级流量 高并发IM 学习实战 疯狂创客圈 Jav ...

  2. windows7下cmd命令窗口没有滚动条的解救方法

    由于昨天的好123问题没有解决,我想查看一下本机的ip地址等,于是打开了cmd窗口,输入ipconfig/all命令进行查看,但是发现出现了下面的窗口,无法进行滚动,完全无法查看详细的信息. 然后我百 ...

  3. STM32L0 HAL库 IO读写功能

    开发环境使用 MDK5.16a + CUBEMX生成代码 开发板使用:NUCLEO-L053R8 核心芯片:STM32L053R8 今天主要学习了下最基础的IO的读写,IO使用 PA5   LED输出 ...

  4. MySQL的information_schema库

    information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式. 什么是元数据呢?元数据是关于数据的数据,如数据库名或表名.列的数据类型,或访问权限.有些时候用于表述该信 ...

  5. Ionic background地址写法问题

    1.背景图片 background:url(‘/img/text.jpg') 这种写法在手机上不好使 ’../img/text.jpg' 这种在手机上好使

  6. shell一些方法

    字符串截取转自原文地址:http://www.jb51.net/article/56563.htm 一:字符串截取 有var变量: var=http://www.aaa.com/123.htm 1. ...

  7. SpringCloud-服务的消费者(Feign)

    Feign简介 Feign是一个声明式的伪Http客户端,它是的写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用Feign注解和JAX-RS注解.F ...

  8. Win7.窗口自动滚动回到屏幕

    PS:笔记本 ThinkPad E440 1.前提:窗口 的一部分位于在屏幕的外面,此窗口处于激活的状态 操作:鼠标放置在窗口内部,鼠标继续往屏幕外部移动,鼠标没有任何其他事件(只有 MouseMov ...

  9. java:Map借口及其子类HashMap五,identityHashMap子类

    java:Map借口及其子类HashMap五,identityHashMap子类 了解:identityHashMap子类 一般情况下,标准的Map,是不会有重复的key值得value的,相同的key ...

  10. 机器学习(十九)— xgboost初试kaggle

     1.官网下载kaggle数据集Homesite Competition数据集,文件结构大致如下: 2.代码实战 #Parameter grid search with xgboost #featur ...