`

aidl

 
阅读更多
什么是AIDL:
AIDL:Android Interface Definition Language,即Android接口定义语言。
Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。
为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。我们知道4个Android应用程序组件中的3个(Activity、BroadcastReceiver 和ContentProvider)都可以进行跨进程访问,另外一个Android应用程序组件Service同样可以。因此,可以将这种可以跨进程访问 的服务称为AIDL(Android Interface Definition Language)服务。
 
建立AIDL步骤:
建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:
(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。
(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
(3)建立一个服务类(Service的子类,在onBind方法返回aidl对象)。
	public IBinder onBind(Intent arg0) {

		// TODO Auto-generated method stub

		return ICCApiImpl.get();

	}
 
public class ICCApiImpl extends ICCApi.Stub{

	private final String TAG = "ICCApiImpl";

	private static ICCApiImpl mCCService;

	public static ICCApiImpl get() {

		if(null == mCCService) {

			mCCService = new ICCApiImpl();

		}

		return mCCService;

	}

	private ICCApiImpl() {

		

	}
......................
}
 
(4)实现由aidl文件生成的Java接口。
(5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。
ICCApi是服务端aidl文件生成的.java文件,以下是客户端调用:
    private void bindService(final Context context) {
        mServiceConnection = new ServiceConnection() {
            @Override
            public void onServiceDisconnected(ComponentName name) {
                // TODO Auto-generated method stub
                mRcsService = null;
                context.bindService(new Intent("com.android.cc.service"), mServiceConnection, Context.BIND_AUTO_CREATE);
                Log.e(LOG_TAG,"liuqiang8==>onServiceDisconnected");
            }
           
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                Log.e(LOG_TAG,"liuqiang8==>onServiceConnected OK");
                mRcsService = ICCApi.Stub.asInterface(service);
            }
        };
        context.bindService(new Intent("com.android.cc.service"), mServiceConnection, Context.BIND_AUTO_CREATE);
    }
分享到:
评论

相关推荐

    ITelephony.aidl和NeighboringCellInfo.aidl

    在Android系统中,AIDL(Android Interface Definition Language)是一种接口定义语言,用于处理进程间通信(Inter-Process Communication, IPC)。当我们谈论`ITelephony.aidl`和`NeighboringCellInfo.aidl`时,...

    AIDL双向绑定kotlin版本

    首先,在`app/src/main/aidl`目录下创建两个AIDL文件,例如`IAidlService.aidl`(服务端接口)和`IClientCallback.aidl`(客户端回调接口)。在`IAidlService.aidl`中声明服务端提供的方法,而在`IClientCallback....

    Android aidl实现传递对象

    而Android Interface Definition Language(AIDL)是Google提供的一种用于处理进程间通信的语言,它允许应用程序之间透明地交换数据。当我们需要在不同的应用之间传递复杂的对象时,AIDL就显得尤为重要。本文将深入...

    Android Studio编写AIDL文件后如何实现自动编译生成

    在目录src/main 下新建了aidl 文件夹之后,在aidl文件夹中也创建了相同的包路径, 创建AIDL文件 XXX.aidl 如果XXX.aidl引用了一个java下的model例如引用了a.b.c.Model; 则需要在XXX.aidl文件中声明import a.b.c....

    AIDL传递基础数据类型

    在Android系统中,AIDL(Android Interface Definition Language)是一种接口定义语言,用于处理跨进程通信(IPC, Inter-Process Communication)。当一个应用需要与另一个应用的组件进行通信时,AIDL就起到了桥梁的...

    AIDL和JNI使用的小例子

    **Android Interface Definition Language (AIDL)** AIDL是Android中用于进程间通信(IPC, Inter-Process Communication)的一种工具,它允许你在不同的Android进程之间定义和实现接口。当你需要在一个应用组件...

    wps for android AIDL调用

    而AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于处理进程间通信(IPC, Inter-Process Communication)。当需要在第三方应用中与WPS Office进行交互时,AIDL就成为了一个...

    aidl 电话文件 ITelephony.aidl NeighboringCellInfo.aidl

    在Android系统中,`aidl`(Android Interface Definition Language)是一种接口定义语言,用于创建跨进程通信(IPC,Inter-Process Communication)的接口。当一个应用程序需要与其他应用程序或系统服务进行通信时,...

    android aidl 不同进程间通信

    Android Aidl(Android Interface Definition Language)是Android提供的一种强大的IPC机制,它允许两个不同进程之间的服务进行接口调用,实现了类似远程方法调用(RPC,Remote Procedure Call)的效果。下面将详细...

    aidl.rar_AIDL_AIDL.rar_android AIDL service_android service_andr

    AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于在不同进程间进行通信,特别是当服务(Service)需要与客户端(如Activity)跨进程交互时。AIDL帮助开发者定义接口,使得...

    利用AIDL进程间传输图片例子

    本示例“利用AIDL进程间传输图片”将详细介绍如何在Android Studio 1.5环境下,通过AIDL实现两个进程间传输图片。 首先,我们需要理解AIDL的基本概念。AIDL是一种简单的接口定义语言,它可以让我们定义一个接口,该...

    AIDL for HALs测试客户端

    **Android Interface Definition Language (AIDL) 用于 Hardware Abstraction Layers (HALs) 的测试客户端** 在Android系统中,硬件抽象层(HAL, Hardware Abstraction Layer)是操作系统与硬件设备之间的接口,它...

    android aidl 复杂数据类型 传图片

    在Android应用开发中,AIDL(Android Interface Definition Language)是一种强大的工具,用于实现跨进程通信(IPC,Inter-Process Communication)。当我们需要在一个Activity中调用另一个进程中服务的方法时,AIDL...

    AIDL List传递 String传递(android studio)

    在这个"AIDL List传递 String传递(android studio)"的示例中,我们将深入探讨如何通过AIDL处理List数据和String数据的传递。 首先,让我们理解AIDL的基本结构。AIDL文件是一个文本文件,它定义了一个接口,这个...

    IPackageStatsObserver.aidl和PackageStats.aidl

    在Android系统中,`IPackageStatsObserver.aidl` 和 `PackageStats.aidl` 是两个重要的接口定义文件,它们是Android Interface Definition Language (AIDL) 文件,用于跨进程通信(IPC, Inter-Process Communication...

    android aidl 本地和aidl通信,远端和aidl

    在Android平台上,应用程序间通信(IPC,Inter-Process Communication)是一项关键的技术,而Android Interface Definition Language(AIDL)就是Android系统提供的一种强大的工具,用于实现进程间的通信。...

    AIDLDemo,Android aidl 使用demo

    **Android AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于处理进程间通信(IPC,Inter-Process Communication)。AIDL使得在不同进程中的应用程序组件能够相互通信,即使...

    android aidl文件不一致引起的调用出错问题.doc

    Android AIDL 文件不一致引起的调用出错问题 Android AIDL(Android Interface Definition Language)是一种基于接口定义语言,用于定义 Android 应用程序之间的接口。AIDL 文件是用于定义服务端和客户端之间的接口...

    android studio下使用aidl接口传递自定义对象

    在Android开发中,有时我们需要在不同的进程间进行通信,这时我们可以使用Android Interface Definition Language (AIDL)。AIDL提供了一种机制,使得Android应用能够跨进程传递数据,包括自定义对象。本文将深入探讨...

    Android多进程通讯AIDL传递Parcelable对象

    AIDL的基本原理是将接口定义为一个.aidl文件,系统会自动生成对应的Java代码,包括客户端和服务端的Binder类。当客户端调用服务端的方法时,这些调用会被转换为跨进程的消息,通过Binder机制在进程间传递。 **一、...

Global site tag (gtag.js) - Google Analytics