Android Service 远程服务

/* * 这个文件是自动生成的。不要修改 */package com.example.remotemathservicedemo;/* 在这里声明任何非默认类型 所有使用AIDL建立的接口都必须继承 android.os.IInterface 基类接口 这个基类接口中定义了 asBinder()方法 用来获取Binder对象 */public interfac
摘要由CSDN通过智能技术生成

远程服务的创建和调用需要使用AIDL语言,步骤如下:

  1. 使用AIDL语言定义远程服务的接口

  2. 通过继承Service类实现接口中定义的方法和属性

  3. 绑定和使用远程服务

以下为一个简单Demo ,RemoteMathCallerDemo界面如下:
这里写图片描述

绑定远程服务后,调用RemoteMathServiceDemo中的MathService服务进行加法运算。

1.使用AIDL语言定义远程服务的接口

以Android Studio为例,首先需要建立对应目录及aidl文件,如下:
这里写图片描述

(比如直接在java目录下的包上右键新建aidl文件 IDE会自动生成aidl目录及该目录下的包和文件这样的小技巧我可不会随便告诉别人)
IMathService.aidl文件内容如下:

// IMathService.aidl
package com.example.remotemathservicedemo;

// Declare any non-default types here with import statements

interface IMathService {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
     long Add(long a,long b);
}

然后在build目录下会自动生成与该aidl文件对应的java接口文件,(若没有生成则重新make project) 如下:
这里写图片描述

在看IMathService.java内容之前呢,不知道你有没有注意到,我前两张截图都截到了上面的一个Module:remotemathcallerdemo,这个就是调用端,目前我们编辑的remotemathservicedemo是服务端。

下面为IMathService.java的完整代码,加上了我自己的理解和注释:

/*
 * 这个文件是自动生成的。不要修改
 */
package com.example.remotemathservicedemo;
/*   在这里声明任何非默认类型
     所有使用AIDL建立的接口都必须继承 android.os.IInterface 基类接口
     这个基类接口中定义了 asBinder()方法 用来获取Binder对象
 */

public interface IMathService extends android.os.IInterface {
   
    /**
     * 本地IPC实现stub类
     */
    public static abstract class Stub extends android.os.Binder implements com.example.remotemathservicedemo.IMathService {
   

        private static final java.lang.String DESCRIPTOR = "com.example.remotemathservicedemo.IMathService";

        public Stub() {
            this.attachInterface(this, DESCRIPTOR);
        }

        //asInterface(IBinder) 是Stub内部的远程服务接口,调用者可以通过该方法获得远程服务的实例
        public static com.example.remotemathservicedemo.IMathService asInterface(android.os.IBinder obj) {
            if ((obj == null)) {
                return null;
            }
            android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
            //判断android.os.IInterface实例是否为本地服务 若是返回android.os.IInterface
            //若不是本地服务 构造Proxy对象并返回之
            if (((iin !
  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值