当前位置:操作系统 > 安卓/Android >>

android开发AIDL实例

   由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。在Android平台,一个进程通常不能访问另一个进程的内存空间。但是android提供了AIDL可以用来进程间数据传递。

         AIDL (Android Inte易做图ce Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。
    AIDL IPC机制是面向接口的,像COM或Corba一样,但是更加轻量级。它是使用代理类在客户端和实现端传递数据。

          下面通过一个实例来演示AIDL,因为是进程之间数据传递,所以这里要使用建立android工程,一个是AIDL的服务端另一个是客户端.

          服务端的实现步骤:


        1.创建.aidl文件      IMyService.aidl


         [html] package cn.com.karl.aidl; 
import cn.com.karl.aidl.Person; 
 
inte易做图ce IMyService { 
     void savePersonInfo(in Person person); 
     List<Person> getAllPerson(); 
     String sayHello(); 

package cn.com.karl.aidl;
import cn.com.karl.aidl.Person;

inte易做图ce IMyService {
     void savePersonInfo(in Person person);
     List<Person> getAllPerson();
     String sayHello();
}

     
       因为这里用到了Peson对象,所以要创建一个person类。Person类,是一个序列化的类,这里使用Parcelable 接口来序列化,是Android提供的一个比Serializable 效率更高的序列化类。


        [html] public class Person implements Parcelable { 
 
    private String name; 
    private String telNumber; 
    private int age; 
 
    public Person() {} 
 
    public Person(Parcel pl){ 
            name = pl.readString(); 
            telNumber = pl.readString(); 
            age = pl.readInt(); 
    } 
 
    public String getName() { 
            return name; 
    } 
 
    public void setName(String name) { 
            this.name = name; 
    } 
 
    public String getTelNumber() { 
            return telNumber; 
    } 
 
    public void setTelNumber(String telNumber) { 
            this.telNumber = telNumber; 
    } 
 
    public int getAge() { 
            return age; 
    } 
 
    public void setAge(int age) { 
            this.age = age; 
    } 
 
    @Override 
    public int describeContents() { 
            return 0; 
    } 
 
    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
            dest.writeString(name); 
            dest.writeString(telNumber); 
            dest.writeInt(age); 
    } 
 
    public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { 
 
            @Override 
            public Person createFromParcel(Parcel source) { 
                    return new Person(source); 
            } 
 
            @Override 
            public Person[] newArray(int size) { 
                    return new Person[size]; 
            } 
 
    }; 

public class Person implements Parcelable {

    private String name;
    private String telNumber;
    private int age;

    public Person() {}

    public Person(Parcel pl){
            name = pl.readString();
            telNumber = pl.readString();
            age = pl.readInt();
    }

    public String getName() {
            return name;
    }

    public void setName(String name) {
            this.name = name;
    }

    public String getTelNumber() {
            return telNumber;
    }

    public void setTelNumber(String telNumber) {
            this.telNumber = telNumber;
    }

    public int getAge() {
            return age;
    }

    public void setAge(int age) {
            this.age = age;
    }

    @Override
    public int describeContents() {
            return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(name);
            dest.writeS

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,