AIDL使用方法记录

原创 2015年11月19日 16:19:42

AIDL介绍:用于不同进城之间的数据交换,方法调用。例如:一个app运行过程中都会使用一个进程,不同的app之间需要进行对象传递则需要使用到AIDL。

类似于进程与进程之间的回调,当然这个过程需要借助AIDL来统一两个进程之间的接口。

详细步骤:

首先需要明确哪个是客户端app,哪个是服务端app,客户端app是需要拿到通过AIDL传递的对象的,而服务端app则是提供者

1.在服务端app内创建AIDL文件:创建aidl文件夹

如图,Android studio中有直接创建aidl文件夹的选项,然后在文件夹内创建包,在包内创建aidl文件即可;

2.在aidl文件中添加方法:添加需要实现的方法即可,与在普通接口文件中创间方法相同

package com.example.myapplication;

interface ILiAidlInterface {  
//需要暴露给客户端app的方法
     void checkName( int bookNo);
}
3.在服务端app的service中实现该方法:

//导入该AIDL
import com.example.myapplication.ILiAidlInterface;

public class MyService extends Service {

    public MyService() {
    }
    private IBinder mIBinder = new te();
    @Override
    public IBinder onBind(Intent intent) {
        return mIBinder;
    }

    private class te extends ILiAidlInterface.Stub {

        @Override
        public void checkName(int bookNo) throws RemoteException {<pre name="code" class="java"><span style="white-space:pre">		</span>Log.e("service", "checkName方法");
} }}

注意需要对该service进行静态注册,这样可以使用其他的app与其绑定:

<service
            android:name=".MyService"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.example.aidlservice.service"/>
            </intent-filter>
        </service>

至此服务端完成,可以先将其部署到手机上。


4.客户端app的aidl文件创建:

这里需要注意的是两个文件需要完全相同,包名也是一样的,否则容易出现Binder invocation to an incorrect interface该错误。

5客户端代码编写:

首先需要将包引入,在该activity与service绑定的时候对AIDL进行实例化,从而即可使用该接口调用接口内的方法


//导入AIDL包
import com.example.myapplication.ILiAidlInterface;

public class MainActivity extends Activity {
    private ILiAidlInterface a;

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

    }
//对应button的点击事件,将该activity与service绑定
    public void bind(View view) {
        Intent service = new Intent("com.example.aidlservice.service");//指定到相应的service

        bindService(service, new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                a = ILiAidlInterface.Stub.asInterface(service);//实例化接口
            }

            @Override
            public void onServiceDisconnected(ComponentName name) {
<span style="white-space:pre">		</span>a=null;
            }
        }, BIND_AUTO_CREATE);


    }
//对应button的点击事件,执行aidl接口内的方法
    public void fun1(View view) throws RemoteException {
        a.checkName(1);
    }

}


这样部署完客户端app,先将点击button将service绑定,然后点击另一个button即可执行另一个进程内个的service的方法



Android IPC机制(二):AIDL的基本使用方法

一、前言 上一篇博客,讲述了实现序列化和反序列化的基本方式,是实现进程间通讯的必要条件,而这篇博客主要来讲一讲AIDL,通过展示AIDL的基本使用方法来引出IPC的核心:Binder。 二、什么是...

AIDL使用方法总结

一、AIDL使用步骤(Android studio环境)场景:应用B要调用应用A中的方法。应用A中要做的事情:(1)src下 右键创建一个aidl文件,提供一个打印日志的方法,编码方式类似java,如...

AIDL 使用方法介绍

在Android中,一个进程通常无法访问另一个进程的内存,那么为了实现进程间通信,需要将信息转换为系统能够理解的原语,再通过系统来实现跨进程访问,在Android中这便是AIDL(Android In...

Android跨进程通信——AIDL使用方法浅析

此篇博客将介绍Android应用开发中的一种常用的跨进程通信手段——AIDL的使用。 我花了一周时间,查阅了许多的资料,在众多AIDL介绍的文章中来来回回,反反复复地梳理线索,将一些概念反复推敲,最终...

android studio AIDL使用方法。

最近学习aidl,在as上遇到了问题,老是出现问题,这里总结一下aidl的用法。因为例子中需要使用自定义类型作为传入参数,所以这篇文章基于此背景写的。step one: 在你的src/mai...

Android Studio下AIDL的使用方法

过去Android开发工具主要是Eclipse,那时使用AIDL记得挺简单的,这几天找工作复习AIDL,发现在Android Studio上按照书上的做法根本跑不通,又在网上找办法,全他妈的抄来抄去,...

Android跨进程通信----AIDL使用方法

1,什么是AIDL 全称为Android interface Definition Language即Android接口定义语言. Android系统中的进程之间不能共享内存,因此,需要提供一些机...

Android AIDL使用方法详解

Android AIDL使用方法详解:   1.什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进...

使用AIDL实现IPC通信之——简单调用远程服务的方法

为什么使用AIDL AIDL和Messenger都可以实现跨进程通信,Messenger底层也是基于AIDL的。使用AIDL而不使用Messenger的情况是:允许从不同应用的客户端访问你的Servi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AIDL使用方法记录
举报原因:
原因补充:

(最多只允许输入30个字)