zoukankan      html  css  js  c++  java
  • 【转】 Pro Android学习笔记(七九):服务(4):远程服务的实现

    目录(?)[-]

    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开发相关文章

  • 相关阅读:
    T450的Fn lock
    移民,不应该是走投无路后的选择
    门槛低的行业看天赋,门槛高的行业看毅力
    个人是时代的一朵浪花
    转载:XPath基本语法
    爪哇国新游记之三十四----Dom4j的XPath操作
    常去的论坛今天两个传统行业的坛友要下岗了
    异常中要了解的Throwable类中的几个方法
    感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?
    JVM对异常的默认处理方案
  • 原文地址:https://www.cnblogs.com/blongfree/p/5048067.html
Copyright © 2011-2022 走看看