zoukankan      html  css  js  c++  java
  • Android 跨进程通信(一)

          一. 概述:
         跨进程通信(AIDL),主要实现进程(应用)间数据共享功能。


         二. 实现流程:
         1. 服务器端实现:
           (1)目录结构,如下图:
               

        (2)实现*.aidl文件:
           A. IAIDLService.aidl实现:

    import com.focus.aidl.Person; 
    interface IAIDLService {
    String getName();
    Person getPerson();
    }

           B. Person.aidl实现:
            parcelable Person;
      (3)进程间传递对象必需实现Parcelable或Serializable接口,下面是被传递的Person对象实现:

    package eoe.demo;

    import android.os.Parcel;
    import android.os.Parcelable;

    public class Person implements Parcelable {

    private String name;
    private int age;

    public Person() {
    }

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

    public String getName() {
    return name;
    }

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

    public int getAge() {
    return age;
    }

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

    public int describeContents() {
    return
    0;
    }

    public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(name);
    dest.writeInt(age);
    }

    public static final Parcelable.Creator<;Person> CREATOR = new Creator<;Person>() {
    public Person[] newArray(int size) {
    return
    new Person[size];
    }

    public Person createFromParcel(Parcel source) {
    return
    new Person(source);
    }
    };

    }

    (4)实现IAIDLService.aidl文件中定义的接口,并定义Service,在Service被bind时返回此实现类:

    package eoe.demo;

    import com.focus.aidl.IAIDLService.Stub;
    import android.app.Service;
    import android.content.Intent;
    import android.os.IBinder;
    import android.os.RemoteException;

    public class AIDLServiceImpl extends Service {

    @Override
    public IBinder onBind(Intent intent) {
    return mBinder;
    }

    /**
    * 在AIDL文件中定义的接口实现。
    */
    private IAIDLService.Stub mBinder = new Stub() {

    public String getName() throws RemoteException {
    return
    "mayingcai";
    }

    public Person getPerson() throws RemoteException {
    Person mPerson = new Person();

    mPerson.setName("mayingcai");
    mPerson.setAge(24);

    return mPerson;
    }

    };

    }

    (5)在AndroidManifest.xml文件中注册Service:

    <service android:name = ".AIDLServiceImpl" android:process = ":remote">

    <intent-filter>
    <action android:name = "com.focus.aidl.IAIDLService" />
    </intent-filter>

    </service>


  • 相关阅读:
    谷歌大规模机器学习:模型训练、特征工程和算法选择 (32PPT下载)
    (转) 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文)
    (转) Supercharging Style Transfer
    Summary on deep learning framework --- TensorFlow
    (转) How a Kalman filter works, in pictures
    Torch 两个矩形框重叠面积的计算 (IoU between tow bounding box)
    C、C++基础和编程风格 (转)
    Linux && shell
    求最短路径的条数
    一个链表中包含环,请找出该链表的环的入口结点。
  • 原文地址:https://www.cnblogs.com/androidsj/p/2360423.html
Copyright © 2011-2022 走看看