`
zartzwj
  • 浏览: 27040 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android AIDL

阅读更多

android的AIDL就是Android Interface definition language的缩写,用于在android内部进程间通信。

1、首先创建一个以.aidl为文件结尾的文件。

里面的forActivity.aidl和forAervice.aidl就是两个aidl文件,两个文件代表的意思为:

forAcitivty:由Service进程回调到Activity所在的主进程中;

forService:由Activity的主进程中回调到Service中。

 

两个类的代码分别为:

package com.example.android.aidl;

interface forActivity{

	void performAction();
}
package com.example.android.aidl;
import com.example.android.aidl.forActivity;
interface forService {
	void registerTestCall(forActivity cb);
	void invokCallBack();
}

当创建完这两个文件后,在gen包下面会自动创建这两个文件对应的java文件。

2、接下来是要实现这两个interface。

实现你定义aidl接口中的内部抽象类Stub,public static abstract class Stub extends android.os.Binder implements com.cao.android.demos.binder.aidl.AIDLService
Stub类继承了Binder,并继承我们在aidl文件中定义的接口,我们需要实现接口方法,下面是我在例子中实现的Stub类:

 

  private final forService.Stub mBinder = new forService.Stub() {
			@Override
			public void invokCallBack() throws RemoteException
			{
				callback.performAction();
				mHandler.sendEmptyMessageDelayed(2000,10000);
			}
			@Override
			public void registerTestCall(forActivity cb) throws RemoteException
			{
				callback = cb;
				
			}
	        
	    };

这个实现类会放在service中,而定义的mBinder是因为在Service中,会使用onBind方法,将mBinder反馈给接收者。

 

这个实现的stub是定义在服务端(Service中)。因为在stub中,是在一个独立的线程中,所以在调用UI或者其他地方时,需要使用Handler来传递,不然会出现一个线程异常。

3、怎么在客户端如何调用服务端得aidl描述的接口对象,doc只告诉我们需要实现Service.onBind(Intent)方法,该方法会返回一个IBinder对象到客户端,绑定服务时不是需要一个ServiceConnection对象么,在没有了解aidl用法前一直不知道它是什么作用,其实他就是用来在客户端绑定service时接收service返回的IBinder对象的:

 

private forService mService;
	private ServiceConnection mServiceConnection = new ServiceConnection() {

		@Override
		public void onServiceDisconnected(ComponentName name) {
			mService = null;
		}

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			mService = forService.Stub.asInterface(service);
			try {
				mService.registerTestCall(mCallBack);
			} catch (RemoteException e) {
			}
		}
	};

mService就是AIDLService对象,具体可以看我后面提供的示例代码,需要注意在客户端需要存一个服务端实现了的aidl接口描述文件,但是客户端只是使用该aidl接口,不需要实现它的Stub类,获取服务端得aidl对象后mService = AIDLService.Stub.asInterface(service);,就可以在客户端使用它了,对mService对象方法的调用不是在客户端执行,而是在服务端执行。

 

文章参考了:http://blog.csdn.net/stonecao/article/details/6425019

接下来是一个完整的例子:

点击打开链接

 

 

 

 

 

 

分享到:
评论

相关推荐

    AndroidAIDL

    **Android AIDL(Android Interface Definition Language)详解** 在Android系统中,进程间的通信(IPC, Inter-Process Communication)是至关重要的,特别是在开发大型、复杂的应用时。AIDL(Android Interface ...

    android aidl 不同进程间通信

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

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

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

    Android aidl Binder框架浅析

    **Android aidl Binder框架浅析** 在Android系统中,服务间的通信是通过Binder机制实现的,它是Android系统中进程间通信(IPC)的核心组件。Binder框架允许不同进程间的对象互相调用方法,使得数据和操作可以在不同...

    Android aidl 实现进程间通信

    Android的AIDL(Android Interface Definition Language)就是专为处理IPC而设计的一种接口定义语言,它允许开发者在不同的进程中暴露服务并进行数据交换。下面我们将详细探讨AIDL在Android IPC中的应用和实现过程。...

    android AIDL 完整DEMO

    Android AIDL(Android Interface Definition Language)是Android系统中用于实现进程间通信(IPC,Inter-Process Communication)的一种机制。在Android应用开发中,当需要在不同进程之间共享数据或调用服务时,...

    android AidlDemo(简单aidl的例子)

    在Android开发中,AIDL(Android Interface Definition Language)是一种用于进程间通信(Inter-Process Communication, IPC)的工具,使得不同应用之间的服务可以共享数据和功能。本示例"android AidlDemo(简单aidl...

    Android AIDL demo (Android Studio)

    在Android开发中,AIDL(Android Interface Definition Language)是一种用于实现进程间通信(IPC, Inter-Process Communication)的工具。本教程将详细讲解如何在Android Studio中创建并使用AIDL,以便不同进程间的...

    android aidl dome下载

    Android AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于实现不同应用程序进程间的通信(IPC,Inter-Process Communication)。AIDL允许我们定义服务和服务客户端之间交互...

    Android AIDL使用例子

    在Android系统中,AIDL(Android Interface Definition Language)是一种用于实现进程间通信(Inter-Process Communication, IPC)的工具。AIDL使得不同进程间的组件能够相互通信,即便它们运行在不同的应用程序或...

    Android AIDL

    **Android AIDL(Android Interface Definition Language)** 是Android系统中用于进程间通信(Inter-Process Communication, IPC)的一种机制。AIDL允许不同Android进程中的组件相互通信,即便它们运行在不同的应用...

    Android Aidl 测试Demo

    在Android开发中,AIDL(Android Interface Definition Language)是一种强大的工具,用于实现进程间通信(IPC,Inter-Process Communication)。AIDL使得一个应用能够暴露其服务到其他应用,即使它们运行在不同的...

    android AIDL 多个客户端调用一个服务器代码

    在Android系统中,AIDL(Android Interface Definition Language)是一种接口定义语言,用于实现跨进程通信(IPC, Inter-Process Communication)。当多个客户端需要调用同一服务的代码时,AIDL就显得尤为重要。这篇...

    Android AIDL 简易demo

    在Android系统中,AIDL(Android Interface Definition Language)是一种用于实现跨进程通信(IPC, Inter-Process Communication)的重要工具。本教程将通过一个简单的AIDL示例,详细讲解如何使用AIDL来实现在不同...

    android AIDL demo讲解

    Android AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于处理进程间通信(IPC, Inter-Process Communication)。在Android应用开发中,当需要在不同进程间共享数据或者...

    android aidl

    Android AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于在不同进程间进行通信(IPC,Inter-Process Communication)。通过AIDL,我们可以让一个应用组件(如服务Service...

    wps for android AIDL调用

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

    Android AIDL示例代码.zip

    AIDL(Android Interface Definition Language)就是Android系统提供的一种强大的工具,用于处理跨进程通信。这个“Android AIDL示例代码.zip”压缩包中包含了丰富的示例和解释,旨在帮助开发者更好地理解和运用AIDL...

    Android aidl远程服务代码

    在Android系统中,AIDL(Android Interface Definition Language)是一种接口定义语言,用于处理跨进程通信(IPC, Inter-Process Communication)。远程服务(Remote Service)是Android应用组件之一,它允许其他...

Global site tag (gtag.js) - Google Analytics