首页 技术 正文
技术 2022年11月19日
0 收藏 494 点赞 2,509 浏览 2125 个字

目录(?)[-]

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,086
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,561
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,410
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,183
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,820
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,903