Android AIDL 创建的DEMO

使用AIDL创建一个demo 主要参考文件, 以及其他地址

Android 接口定义语言 (AIDL) | Android 开发者 | Android Developers

绑定服务概览 | Android 开发者 | Android Developers

Android 接口定义语言 (AIDL)

Android 接口定义语言 (AIDL) 与您可能使用过的其他接口语言 (IDL) 类似。您可以利用它定义客户端与服务均认可的编程接口,以便二者使用进程间通信 (IPC) 进行相互通信。在 Android 中,一个进程通常无法访问另一个进程的内存。因此,为进行通信,进程需将其对象分解成可供操作系统理解的原语,并将其编组为可供您操作的对象。编写执行该编组操作的代码较为繁琐,因此 Android 会使用 AIDL 为您处理此问题。

注意: 只有在需要不同应用的客户端通过 IPC 方式访问服务,并且希望在服务中进行多线程处理时,您才有必要使用 AIDL。如果您无需跨不同应用执行并发 IPC,则应通过实现 Binder 来创建接口;或者,如果您想执行 IPC,但 需要处理多线程,请使用 Messenger来实现接口。无论如何,在实现 AIDL 之前,请您务必理解绑定服务

上面是官网对AIDL的描述,下面说了使用AIDL创建一个简单的dmeo

1 选中自己包名

2 点击鼠标右键 之后选择new ,之后再选择AIDL 在点击AIDL File

之后自己取一个名字点击finish

3 之后android studio 会自动生成一个AIDL包如下, 下面文件是自己刚才文件的,报名时工具生成

一般里面默认有一个方法,自己有添加了几个,1个void 和2个有返回值的方法,具体如下

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

interface Information {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);

    // 自己定义的几个方法
    void Infor(String name ,int age);

    boolean isActive();

    List<String> getList();

}

4 之后再点击工具栏上的Build

5 选择里面的Make Project

之后自己在app下面的build里面查看生成的文件,如果文件生成了,就可以接着下面的工作了

下面图是 Make Project 生成的

AIDL文件生成之后下面写代码

创建一个Service

public class InforService extends Service {

    private final IBinder iBinder = new Information.Stub() {
        @Override
        public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
            Log.d("******InforService", "Received data: " + anInt + ", " + aLong + ", " + aBoolean + ", " + aFloat + ", " + aDouble + ", " + aString);
        }

        @Override
        public void Infor(String name, int age) throws RemoteException {
            Log.d("******infor", "姓名=" + name + "," + "年龄=" + age);
        }

        @Override
        public boolean isActive() throws RemoteException {
            return true;
        }

        @Override
        public List<String> getList() throws RemoteException {
            return Arrays.asList("A", "B", "C", "D");
        }
    };

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.d("******Bind service:", String.valueOf(intent));
        return iBinder;
    }
}

之后再AndroidManifest 文件里面注册下刚才创建的服务

            <service
            android:name="com.hly.aidldemo.InforService"
            android:enabled="true"
            android:exported="true" />

最后在Main里面使用ServiceConnection来获取AIDL连接成功和失败的方法

在连接成功的方法里面使用asInterface获取AIDL里面的方法

下面是自己放2个void方法里面传递一些参数,然后获取2个有返回值的方法,如下

public class MainActivity extends ComponentActivity {

    private final ServiceConnection mServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            Information information = Information.Stub.asInterface(service);
            try {
                //传递参数
                information.basicTypes(18,18L,true,18.88f,18.88,"HI");
                information.Infor("张三丰",180);
                //获取参数
                Log.d("******isActive", String.valueOf(information.isActive()));
                Log.d("******getList", String.valueOf(information.getList()));
            } catch (RemoteException e) {
                throw new RuntimeException(e);
            }
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.d("******onServiceDisconnected,","onServiceDisconnected:"+name);
        }
    };

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity_layout);

        Intent intent = new Intent(this,InforService.class);
        bindService(intent,mServiceConnection, Context.BIND_AUTO_CREATE);
    }
}

这样一个简答的AIDLdemo 流程就创建完成了。

demo 地址,上传到码云上了,点击可以下载看看

相关推荐
水瓶丫头站住35 分钟前
安卓APP如何适配不同的手机分辨率
android·智能手机
xvch1 小时前
Kotlin 2.1.0 入门教程(五)
android·kotlin
xvch5 小时前
Kotlin 2.1.0 入门教程(七)
android·kotlin
望风的懒蜗牛5 小时前
编译Android平台使用的FFmpeg库
android
浩宇软件开发6 小时前
Android开发,待办事项提醒App的设计与实现(个人中心页)
android·android studio·android开发
ac-er88886 小时前
Yii框架中的多语言支持:如何实现国际化
android·开发语言·php
苏金标7 小时前
The maximum compatible Gradle JVM version is 17.
android
zhangphil7 小时前
Android BitmapShader简洁实现马赛克,Kotlin(一)
android·kotlin
iofomo12 小时前
Android平台从上到下,无需ROOT/解锁/刷机,应用级拦截框架的最后一环,SVC系统调用拦截。
android
我叫特踏实12 小时前
SensorManager开发参考
android·sensormanager