AIDL和其他的IDL类似,它允许你定义程序接口,以便客户端与服务器端通过IPC机制交互。在android上面,一个进程一般不能访问另外进程的内存。因此,Android平台将这些跨进程访问的对象分解成操作系统能够识别的简单对象。并为跨应用访问而特殊编排和整理这些对象。用于编排和整理这些对象的代码编写起来十分冗长,所以Android的AIDL提供了相关工具来自动生成这些代码。今天,我们开始AIDL的学习。

简单说明

一,AIDL的定义:

它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口

二、AIDL的开发流程:

  • 定义AIDL文件(先在服务端定义,客户端也要定义,内容跟服务端一样)
  • 服务端实现接口
  • 客户端调用接口

具体的aidl的说明:  http://www.cnblogs.com/popapa/p/android_aidl.html

AIDL的简单使用之定义 AIDL 接口

为了测试,我写了aidl服务器端和aidl客户端!

aidl服务器端

项目结构如下:

aaarticlea/png;base64,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" alt="" />

一、 创建.aidl文件:IRemoteAIDL.aidl

// IRemoteAIDL.aidl
package com.huhx.linux; // Declare any non-default types here with import statements interface IRemoteAIDL {
int add(int a, int b);
}

二、 定义服务类:RemoteService.java

package com.huhx.linux.aidlserver;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log; import com.huhx.linux.IRemoteAIDL; public class RemoteService extends Service {
private final static String TAG = "RemoteService"; private IRemoteAIDL.Stub binder = new IRemoteAIDL.Stub() {
@Override
public int add(int a, int b) throws RemoteException {
Log.i(TAG, "a = " + a + ", b = " + b);
return a + b;
}
}; @Override
public IBinder onBind(Intent intent) {
return binder;
}
}

三、 在AndroidManifest.xml文件中声明服务:

<service android:name=".RemoteService" android:enabled="true" android:exported="true" />

aidl客户端

项目结构如下:

aaarticlea/png;base64,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" alt="" />

一、 创建与服务器端一样的aidl文件: IRemoteAIDL.aidl

// IRemoteAIDL.aidl
package com.huhx.linux; // Declare any non-default types here with import statements interface IRemoteAIDL {
int add(int a, int b);
}

二、 在MainActivity中,得到远程服务并调用它的方法。

package com.huhx.linux.aidlclient;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast; import com.huhx.linux.IRemoteAIDL; public class MainActivity extends AppCompatActivity {
private IRemoteAIDL iRemoteAIDL; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
binServices();
} private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
iRemoteAIDL = IRemoteAIDL.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
iRemoteAIDL = null;
}
}; // 绑定服务
private void binServices() {
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.huhx.linux.aidlserver", "com.huhx.linux.aidlserver.RemoteService"));
bindService(intent, conn, Context.BIND_AUTO_CREATE);
} // 处理相加的方法
public void addMethod(View view) {
try {
int result = iRemoteAIDL.add(3, 4);
Toast.makeText(MainActivity.this, "3 + 4 = " + result, Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}

三、 根据aidl文件,android生成的接口如下(可以不关注):

/*
* This file is auto-generated. DO NOT MODIFY.
* Original file: J:\\android\\andridtest\\andridtest\\2016-02-29\\BaseTest8\\aidlclient\\src\\main\\aidl\\com\\huhx\\linux\\IRemoteAIDL.aidl
*/
package com.huhx.linux;
// Declare any non-default types here with import statements public interface IRemoteAIDL extends android.os.IInterface
{
/** Local-side IPC implementation stub class. */
public static abstract class Stub extends android.os.Binder implements com.huhx.linux.IRemoteAIDL
{
private static final java.lang.String DESCRIPTOR = "com.huhx.linux.IRemoteAIDL";
/** Construct the stub at attach it to the interface. */
public Stub()
{
this.attachInterface(this, DESCRIPTOR);
}
/**
* Cast an IBinder object into an com.huhx.linux.IRemoteAIDL interface,
* generating a proxy if needed.
*/
public static com.huhx.linux.IRemoteAIDL asInterface(android.os.IBinder obj)
{
if ((obj==null)) {
return null;
}
android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
if (((iin!=null)&&(iin instanceof com.huhx.linux.IRemoteAIDL))) {
return ((com.huhx.linux.IRemoteAIDL)iin);
}
return new com.huhx.linux.IRemoteAIDL.Stub.Proxy(obj);
}
@Override public android.os.IBinder asBinder()
{
return this;
}
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
{
switch (code)
{
case INTERFACE_TRANSACTION:
{
reply.writeString(DESCRIPTOR);
return true;
}
case TRANSACTION_add:
{
data.enforceInterface(DESCRIPTOR);
int _arg0;
_arg0 = data.readInt();
int _arg1;
_arg1 = data.readInt();
int _result = this.add(_arg0, _arg1);
reply.writeNoException();
reply.writeInt(_result);
return true;
}
}
return super.onTransact(code, data, reply, flags);
}
private static class Proxy implements com.huhx.linux.IRemoteAIDL
{
private android.os.IBinder mRemote;
Proxy(android.os.IBinder remote)
{
mRemote = remote;
}
@Override public android.os.IBinder asBinder()
{
return mRemote;
}
public java.lang.String getInterfaceDescriptor()
{
return DESCRIPTOR;
}
@Override public int add(int a, int b) throws android.os.RemoteException
{
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
int _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
_data.writeInt(a);
_data.writeInt(b);
mRemote.transact(Stub.TRANSACTION_add, _data, _reply, 0);
_reply.readException();
_result = _reply.readInt();
}
finally {
_reply.recycle();
_data.recycle();
}
return _result;
}
}
static final int TRANSACTION_add = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
}
public int add(int a, int b) throws android.os.RemoteException;
}

IRemoteAIDL.java

AIDL的简单使用之通过 IPC 传递对象

如果要跨进程传递某个类,可以通过 IPC 接口来实现。 不过,请务必确保在 IPC 通道的对端可以识别该类的代码,该类必须支持 Parcelable 接口。支持 Parcelable 接口非常重要,因为这使得 Android 系统可将对象分解为能够跨进程组装的原生数据。

可按以下步骤创建支持 Parcelable 协议的类:

  1. 必须实现Parcelable 接口。
  2. 实现 writeToParcel 方法,参数为当前对象的状态,并写入一个 Parcel中。
  3. 在类中添加一个名为 CREATOR 的静态成员变量,即为一个实现了 Parcelable.Creator 接口的对象。
  4. 最后,创建 .aidl 文件,声明该 Parcelable 类(如下述 Rect.aidl 文件所示)。

如果采用自定义编译方式,请不要.aidl 文件加入编译项目。与 C 语言的头文件类似, .aidl 文件不会被编译。AIDL 利用上述方法和成员变量来分解和组装对象。

我们在上述的项目基础上做修改,服务器端:

aaarticlea/png;base64,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" alt="" />

一、 修改的IRemoteAIDL.aidl文件:

// IRemoteAIDL.aidl
package com.huhx.linux; import com.huhx.linux.Person; interface IRemoteAIDL {
int add(int a, int b); List<Person> addPerson(in Person person);
}

二、 增加Person.aidl文件:

// Person.aidl
package com.huhx.linux; parcelable Person;

三、 增加Person.java文件,注意它的位置是com.huhx.linux;

package com.huhx.linux;

import android.os.Parcel;
import android.os.Parcelable; /**
* Created by Linux on 2016/5/9.
*/
public class Person implements Parcelable {
public String username;
public String password; public Person(String username, String password) {
this.username = username;
this.password = password;
}
protected Person(Parcel in) {
username = in.readString();
password = in.readString();
}
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(username);
dest.writeString(password);
}
}

这里,之前是放在com.huhx.linux.aidlclient下的,但是处理起来总是报错。不知道是否要求aidl的包名与序列化类的包名一致?

三、 修改RemoteService.java文件

public class RemoteService extends Service {
List<Person> persons = new ArrayList<>();
private final static String TAG = "RemoteService"; private IRemoteAIDL.Stub binder = new IRemoteAIDL.Stub() {
@Override
public int add(int a, int b) throws RemoteException {
Log.i(TAG, "a = " + a + ", b = " + b);
return a + b;
}
@Override
public List<Person> addPerson(Person person) throws RemoteException {
persons.add(person);
return persons;
}
};
@Override
public IBinder onBind(Intent intent) {
return binder;
}
}

我们在上述的项目基础上做修改,客户端:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQ4AAAD/CAIAAACPaq/6AAAUMklEQVR4nO2d3W8c13mH+ScICBAgBQokvghQNBftRYsM0AaBgSJA0uai6UV8FxjGFmivBENCLLmiDQf+UOy5SBDZsVxYsOUPWd0PZekltaYpm2T1ATKmKEqktJRktOJq3Vg2qRWX8iYiTi9md+bMOe/MvjM7uzM783swF7uz55wZCefhOWd33veMzS6s/+Cf//XJw29m5Di7cAVHz+MXh38zu7COQz7GDj1j4sCBo+cxJgAADKAKACygCgAsolHlwyOPKsfNhVORtAxAQhiUKn3YUsmNjY2N5Sr0B4ZZE6JmGh5lhFA+9WwNgEAMUBXyYDSWFFVqphG8EkgtjioTExN5inK53LOVSFXxJJQqfV2uvwZAqnB6Q71eJ1Wp1+s9W+FoQJXpdOqxsa4DQqjjgF0kV/FWxarSKeY7qjglu9frttr9xDpvvev5DwfZwdUbqtWq4km1WuW0ElYVqYvTnVspQKriLuOnitpartI9aRiG+zRUAQqu3tBsNguFgu1JoVBoNpucVjiqbFw+s3H5jNenzoghd27rZefvv/RGlkFfjHipIpesmUanLfkaVk3nepx/O8gIam+Yn5+3VZmbm2O24qPK3nfOKYf0oTwBI1Rx9Vz5nSSD9dK1LvFQRbmYa/xQZ2Od18x/PsgCam9ot9vFYtEaUtrtNrOVcKo4f9k9RhX3koQeVYg1vK8q9pKoC1QBLIjesLS0lM/nl5eX+a30oYrfqEINBBGuVaSTUAX0gu4N09PTgVrx+mp44/IZ3wmY862TSa5VXEUq5ARMCLdR/t+AudzroYqomYH+E0C6GexPkL1UAWBkGPgcA6qAdIDpOAAsoAoALKAKACygCgAsoAoALKAKACygCgAsoAoALOJXRf+NcmrlVtw3BYBKElUZti0103AeOI4o2hikjshUmZyc3NraClGRVIU8orpVFUmVmmnAEkASmSpWNNjs7Cw/ysUiflUkKjk9oMUfyJUVIlbFiglbWVnhV+RoAFVA7ESvip0SiZPqRYRXpZKzY1jkzBFynKMUnSKFv3SCY5yS3d7uzvsiqPQuribfl2vIcTRY7KSRQalisba21rNiH6pQwWDOX/mamZPzJUm93ylpd3AnKFmK8nIJ0o05VhyQTmGASTWDUqVUKl2/fp1Tsa9Rpeb/Wv8zrwjgrYqWVklL7+JcwR2xGXAGB0aEgaiysLCwu7vLrDgoVeQkF05/DqKKZ5+XE1roQ4lHugsw4kSsyszMTKvVClRxUKpI52qmEXhUkSZtQohKrpMWw5SC9O1MGfYETPsUpIfIVCmXy41GI0TFsF8W95yAOZMvI5cLPKoIepHuzMuUzBbS/Ayr+lSS0F/r4/pdBQAv4lcFgJEAqgDAAqoAwAKqAMACqgDAAqoAwAKqAMACqgDAAqoAwCJ+VZCGAowESVSFZYsrdwQAAyehqvR+BgyqgOESjSoTExNkFGS5XO5ZF49LgpEgGlXq9TqpCie8PlFpKADwIrIJWLVaVTypVquciiFVkaOn1MASLQeeGsCCcBIQmMhUaTabhUJBTnHUbDY5FftWhUo34YRoSeGKRFYKALhEuayfn5+3VZmbm2PWimBU8Uk30aMYAFyiVKXdbheLRWtI4eeY7FcVOt1Ex5VuTLBnMQCYRPxl8dLSUj6fX15e5lfpVxU63YQVOZ/LGVJWCbIYADyi/11leno6UPk+fldxUt9p6SaEZoRXMQBYjPRPkOjuYHjEr0o48GM9GDIjqEon2RaGFDBURlAVAOIAqgDAAqoAwAKqAMACqgDAAqoAwAKqAMBitFX58MijynFz4VTcNwXSSdpUic8W/j7eQXf8ruSIiDUwbFKoCnkM/l6gSsqJX5V+UlhkSxUQK/Gr0k8KC44GUAVEQvyqiD5SWNgarN7eHC8tjpcWV29vepVx4+xwKm8pTG2TapiVTqhLruKU0jp7JTdmmGbO1YCaK0MKZnaXlGNrtMh/eQJGtECEdnZf+zYLgpEIVUKnsLA1GC8tWjEt46VFrzISlZza191nnG5Vydmd0ZJEd0CqI32qRfa7OrpW0h5riCGHVIV5LZ9mQTASoYoIm8JCV+VQkaGK3m/UM1Q4sudr/Qyxzbc6JiglO+ep4cprVGFdy6dZEIykqBIuhYUzAatvHiouPlX6/WqdMQFjqWIPJVAFCJEcVUSoFBZhl/XyvL1imjViAuaeFgmv184Myqv7yhlj/FSxU8xICf7slpmq6NfSmgVhSZAqIngKi/BfFjtJKZS/vtSyPrQq0nWk3BdEScnUbj8Pqgp1LaJZEJZkqRKUJP2uAlLOaKsCwNCAKgCwgCoAsIAqALCAKgCwgCoAsIAqALCAKgCwgCoAsMiuKokJygejAVSJwhavpxFdj116PYCF0PnRAKpE8fwYVMkAo61K0lNYBFIlDNi7bHiMtipJT2EBVVLEaKsiYklh4cS6dLspEXWoJLmQfVAyYOjhKHoZQaWekC6EidvgGXlVhp7Combm5AhfIkGEq7+rqpAZMPwjt+wofz15BUaV4THyqoghp7AQQujjCpm1QlATME5CFvewJI0heuQjVBkeaVBlqCksaqahp96KXBViQgVVYiYNqohhprCQeqwTrk5PwGSrXBMwLQOG/yzOJ54eqgyPlKgihpfCwpl8OZkl5B4rL8hN6hswNQMGtazXvznwTz2BZf3gSY8qQUEKCxCI7KoCQCCgCgAsoAoALKAKACygCgAsoAoALKAKACygCgAsoEpf3Gvvvl/b+tW5z16Ybbww2/j1uc8q63fvtXfjvi8QPVAlPBcbrcMfN44tb5663pq4uTNxc+fU9dax5c3DHzcuNlpx3x2IGKgSkqVG6/nZRnG99bsbO8pRXG89P9tYitGWQYTp+7SZjawAUCUMzfaDZz++nV9vlW7skEd+vfXsx7eb7Qdyrcq10/unDj5e+fn+qYOVa6cZ17EehiR3h/R9RJLVdwPu4wVV4r6BkWTi2tZvP/kyv76TX995+9Lnj+1/+nvff9g6rJP59Z3ffvLlqauuAJh9kwfu/+m+EOL+n+7vnzrIuE7NNMYMw1C6YTRPE9dMwzB6PcIf9CH/NAcFQJUwvDjfOHF1+2StdbLW+tnegweOvG29lo8TV7d/OdeQaz1e+Tn52puaaYzlTKX71UxDfrw/JNZz/L1SYEAVB6gShvHpjXevtazj4R/88O3Vu/Zb+fiP6Q29rj0Nsw7fyVin57nCIq03avi9V1oMPXmFXUcLQ+6U7/Ddl47KaS6u1UxjLPe+e7Jlvel+JAU6f/eJJwztnsP+bycEqBKGJz/YeOtqyzr+/vsPv3nlrv1WPsanb+t1900esD2xbfG4TrfLO2GR0hk7uKtXWgwteYXPbuNKl5ZGCSKeuXvKKSWVlxruJ31TcoAqYXhutnHsyvYba6031lqP/NvjB18rWq/l49iV7Wc/auh1LT02dzaFEJs7m9Zbj+u4gvc7m3brW3/7pMXwiJ2ktxgn/vZTqrg2Ilcup4SDujcTH3GgShjya5svXbjz+ur266vbR85vPPLv++xlvXXy9dXtly7cObn6pV7XHkyU1xTqH2lT79b+aTFoVbSUMJ7pL0hVOgXdUcu6Kp3rpWb5AlXCsPXVgydOb7x66d5/Xt4mj1cv3Xvi9MbWVw/0uvYEzB5Sek/AhOj2b+pPdo+0GJoqriwXQnqvp8igVRE10zByOUO+MKGKWmzEgSohOb+xvf90/eXle6+ubCvHy8v39p+un9/YJiuGWNYTb9wLBu+0GIQqqinqUkj7gkBa1sv3Qt6Z8kW2vvoZXaBKeM7e2t4/deu5s3eOXGy+cuneK5fuHbnYfO7snf1Tt7w8yRqp+OqrA1Tpi7tfPXhn5YtD0/W9k/+7b2rj6Zn6ictf3qXmXVkkNcsUIQRUAQPCvbRKA1AFABZQBQAWUAUAFlAFABZQBQAWUAUAFlAFqSQAi6yrglQSgEmmVUl0KgmQMLKrynBTSShbcIHRI7uqDDGVhPywemqeHswc2VVliKkkUhZknlGyq8oQU0mQqsjbq8oRUk6OL2LvVFcAozt4hcg1AaIku6oMMZWEPgFTE67YAVnurbyVpY07UMoJyPLINQEiJbuqDDOVhDp+aMHthhKd6xSS+r06eyNyqCiDGIiQ7KoyxFQSWt+llyxkJJSUi5VQhRyjoMpAyK4qQ0wlQScdlpYadA4HU52KaRMwIisRVBkU2VVFDC+VBNV3iTW7Oqo40zTnrPeyHqoMmEyrIpBKArDJuioCqSQAD6gCAAuoAgALqAIAC6gCAAuoAgALqAIAC6gCAAuoAgCL+FXZ+8455ZhauRX3TQGgkkRVwtviFa3herIQ8e0gDAlVhTx6twVVwMCIRpWJiYk8Rblc7lk3SlW8gCqgb6JRpV6vk6rU6/WedTkaQBUQO5FNwKrVquJJtVrlVAyvih7yoe4sqobkQhUQmshUaTabhULB9qRQKDSbTU7FsKrUzFx3VWLHFLp21nVLA1VAf0S5rJ+fn7dVmZubY9bqZwKmjitkYgaBCRiIgChVabfbxWLRGlLa7TazVkhVaqZhDxWu9EBQBQyEiL8sXlpayufzy8vL/CohVZFkqJmG7wRMtgqqgJBE/7vK9PR0oPJhvyx2Jl9GLqeOKsKdvdHEqAL6JV0/QQIwMOJXBYCRAKoAwAKqAMACqgDAAqoAwAKqAMACqgDAAqoAwAKqAMBitFX58MijynFz4VTcNwXSSdpUic8W/j7bQXfk7j63hi1RYyWFqpDH4O8FqqSc+FXpJ4VFtlQBsRK/Kv2ksOBoAFVAJMSviugjhYWtwertzfHS4nhpcfX2plcZN3I4i76ZvHtH0konNCZXcUrRG2ybOVcDcvyMK+xMLelEpylpATon9MA1pwU1FFR67dssCEYiVAmdwsLWYLy0aMW0jJcWvcpIuHe11s843aqSszujJQm1b7ZdR/rUMGs+qmgl7bGGGHJIVZjX8mkWBCMRqoiwKSx0VQ4VGaro/UY9Qwbpe73Wz3R3xPYZVYi9sy0XyU3uqVGFdS2fZkEwkqJKuBQWzgSsvnmouPhU6ferdcYEjKWKPZRAFSBEclQRoVJYhF3Wy/P2imnWiAmYe1okvF47Myiv7istJXxVsc46NVwtM1XRr6U1C8KSIFVE8BQW4b8sdpJYkNko3cv60KpI13FyZVAlJVO7/TyoKtS1iGZBWJKlSlCS9LsKSDmjrQoAQwOqAMACqgDAAqoAwAKqAMACqgDAAqoAwAKqCCHEgeN7fN4CIKCKxRtnfnq4+J2n3v2z8Xe/8ULhL4/N/EvcdwQSB1QRG3c+efKtrx04vsc+nnzra//zhwtx3xdIFlBFvPnRIweO7/n0/85anlgvjs38JO77Sipej16mfRdBqCJeLP3VM+99UzmeL/wFWdh+JNEJXlT3+44L9YFIv1t1dWUiTq3XdaAKYKDsQul6MnkgPYTXlWumYRhKQa9blcMoA6viBVRJK0c/+MfXPvgnIYS8SpGP+3+8a5eR8et/8aliPYuv3ILnrbpOQBUW2VXF8kH4qmKXkfHof8q8hExz0TOjhR4zI51xOqI+4+tGrbijM/1UIbYwp5Ambp0yRIilfodQJUVEpQq1UlFCr+wwff+MFl6pMJR9k/WWvcI2+1elZubkcGafHc/lu4cq6SLaUUXrNWPaX9teAZWeqTDcShAtczIAkKo4ock+XVsdV8gUHULRFaqkiKPVHx2t/kj4r1W6ZWQ8+p8kC51JKIQqWlf2bFlBL6754HzmrUrNNPQ8Y1Als7xa/aHuyStT/+BV3qv/uXN6yWOMHhBPvvZKheEhpN2y+tWb8973GzBqIqf8S9S5ps8ETLYKqqSXE/OPHTi+5+KnJ69unD5wfM+J+ce8Suo/Vqi/ZDjrC+UnDE6eJDIVRrcxZ4zRFv7unmmdYf8EpH50zZ02pnPaTqOhmtutZmJUyQB8VUBmgSpCCHH+2mvPvPfNzzavfH639sx73/rvtZfjviOQOKAKACygCgAsoAoALKAKACygCgAsoAoALKCKEEhDARhAFSGQhgIwgCpIQwFYQJVUpKHIarz7MIEqwdJQKA8XJqX3QZXBA1WCIm10mvwdFqFKdGRXlbBpKOQ9gT1CrZIDVImO7KoSNmDYSxU9O4QV2OGE1BMxLD57tZp6kgrpFpQ6WU0NMUygSh+qeG4vLEdT+WTb8so7IWXpIuZ4SA0RD1AlhCpaMCGdHUKRwypEpx6yW9aC1l2DGHUTmY53HybZVSVsGgqq79JLFjK9g9XJ/fNO+KqC1BAxkV1VbAKmoSD/zJN5J9yq1ExTnYp55Z2gVEFqiLiBKkIEi62nZ0TUml0dVZxpmpI8mFzWe6mC1BAxAVWEQBoKwACqCIE0FIABVAGABVQBgAVUAYAFVAGABVQBgAVUAYAFVAGABVQBgEX8qnx45FHluLlwKu6bAkAliarAFpBAIlNlcnJya2srREVSFfKI6lYBCEFkquTz+Xw+Pzs72263A1WEKmAkiFiVfD5fKBRWVlb4FTka3LhQvHGh2N8NAtAX0atiUS6X6/U6p6KXKn+89uMvzv317p19tyYe+nzuO5++8+eb5/9G+lxN8kAlgiAzPwAQhkGpYrG2ttazopcqrcrfrf/627t39l3+5UOrLz50Zu/Xv/ivv5U+dyd5IBNBeG/IDkBQBqVKqVS6fv06p6KXKvNzHx1+7mn5mJ/7SPpc34hdTwShZX4AICwDUWVhYWF3d5dZsb8JWPedX+46KfMDAGGJWJWZmZlWqxWoYj8TMCV1kJoIgsj8AEBIIlOlXC43Go0QFcnvhW9cKJ48+osAEzDRK3kjRAH9kdBf629cKPaagAEwVOJXxYteEzAAhkpyVQEgUUAVAFhAFQBYQBUAWEAVAFhAFQBY/D9xY1k1GyMrggAAAABJRU5ErkJggg==" alt="" />

aidl文件以及Person类与服务器端的一样,这里不做说明,在MainActivity中增加测试的方法。

// 添加一个方法
public void addPerson(View view) {
Person person1 = new Person("Linux", "123456");
Person person2 = new Person("Huhx", "654321");
int length = 0;
try {
iRemoteAIDL.addPerson(person1);
length = iRemoteAIDL.addPerson(person2).size(); Toast.makeText(MainActivity.this, "list size: " + length, Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
e.printStackTrace();
}
}

android基础---->AIDL服务的使用的更多相关文章

  1. Android 使用AIDL调用外部服务

    好处:多个应用程序之间建立共同的服务机制,通过AIDL在不同应用程序之间达到数据的共享和数据相互操作, 本文包括: 1 .创建AIDL 服务端.2 .创建AIDL 客户端. 3.客户端调用服务端提供的 ...

  2. Android基础总结(8)——服务

    服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行哪些不需要和用户交互而且还要长期运行的任务.服务的运行不依赖任何用户界面,即使当程序被切换到后台,或者用户打开了 ...

  3. android AIDL服务

    这篇文章http://byandby.iteye.com/blog/1026110我们介绍了android的本地服务:它只能由承载它的应用程序使用.现在我们将介绍如何构建可由其他进程通过 RPC 使用 ...

  4. Android跨进程訪问(AIDL服务)

    我将AndroidAIDL的学习知识总结一下和大家共享 在Android开发中,AIDL主要是用来跨进程訪问. Android系统中的进程之间不能共享内存,因此,须要提供一些机制在不同进程之间进行数据 ...

  5. Android跨进程通信AIDL服务

    服务(Service)是android系统中非常重要的组件.Service可以脱离应用程序运行.也就是说,应用程序只起到一个启动Service的作用.一但Service被启动,就算应用程序关闭,Ser ...

  6. 【Xamarin开发 Android 系列 4】 Android 基础知识

    原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...

  7. android基础---->service的生命周期

    服务是一个应用程序组件代表应用程序执行一个长时间操作的行为,虽然不与用户交互或供应功能供其它应用程序使用.它和其他的应用对象一样,在他的宿主进程的主线程中运行.今天我们开始android中普通serv ...

  8. Android基础——项目的文件结构(三)

    Android基础--项目的文件结构(三) 代码源文件夹与资源文件夹 [注]此项目文件结构仅限于Android Studio下的Android项目!!! 在一个Android项目中,代码源文件夹有4个 ...

  9. Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- AIDL

    服务端: 最终项目结构: 这个项目中,我们将用到自定义类CustomData作为服务端与客户端传递的数据. Step 1:创建CustomData类 package com.ldb.android.e ...

随机推荐

  1. 网卡phy9161A

    硬件1. 网口网口使用4根信号线:两根发送,两根接收.一对信号线中一根承载0——+2.5V信号电压,而另一根负载的电压是0——-2.5V,因此可产生一个5Vpp的信号差.RJ45中有用的就是4根信号线 ...

  2. 删除TP数据库缓存

    删除 /Runtime/Data/_fields/ 缓存表文件

  3. debian配置网络

    http://blog.csdn.net/ypist/article/details/8513274 vim /etc/resolv.conf   配置域名服务器 search test.ivic.o ...

  4. Quill + Framework 7 移动端无法获取焦点

    Quill 是一个轻量级的富文本编辑器.最近公司项目中需要用到这个东东.使用方法可以直接查看它的官网地址或者Github地址: Github地址:quilljs 官网地址:quill官网 主要说一下用 ...

  5. 关于在Android中添加事件监听器的方法

    一.匿名内部类 1.先找到那个控件(初始化) private Button bt1;  //onCreate方法外 bt1 = (Button)findViewById(R.id.button1); ...

  6. Geometric deep learning on graphs and manifolds using mixture model CNNs

    Monti, Federico, et al. "Geometric deep learning on graphs and manifolds using mixture model CN ...

  7. 机器学习理论之SVM

    支持向量机系列 (1) 算法理论理解 http://blog.pluskid.org/?page_id=683 手把手教你实现SVM算法(一) (2) 算法应用 算法应用----python 实现实例 ...

  8. WinInet 小例子

    #include <windows.h> #include <wininet.h> #include <string> #include <iostream& ...

  9. RequireJS使用小结1——for Effective JavaScript Module Loading

    1. require和define的区别 The require() function is used to run immediate functionalities, while define() ...

  10. Windows App开发之集成设置、帮助、搜索和共享

    应用设置和应用帮助 "设置"合约 上一节中我们学习了怎样将应用设置保存到本地.这样的方式是通过在App内加入设置选项,这里另一种方式. 微软将其称为"设置"合约 ...