Android AIDL实现两个应用程序间的跨进程通信实例

  

本文为大家分享了Android AIDL实现两个应用程序间的跨进程通信实例,供大家参考,具体内容如下

  

<强> 1服务端创建

  

首先需要创建一个Android工程然后创建AIDL文件,创建AIDL文件主要为了生成继承了粘合剂的存根类,以便应用活页夹进行进程间通信

  

servier端结构如下

  

 Android AIDL实现两个应用程序间的跨进程通信实例

  

AIDL代码如下

     //IBookManager.aidl   包com.example.bookserver.aidl;//声明任何非默认类型和导入语句   进口com.example.bookserver.aidl.Book;   接口IBookManager {/* *   *展示了一些基本类型作为参数,您可以使用   AIDL *和返回值。   */空白basicTypes (int anInt,长,布尔aBoolean浮动,   双aDouble,字符串aString);      ListgetBook ();   布尔向书(书);      }      之前            包com.example.bookserver.aidl;      parcelable书,      

之后创建一个实现了Parcelable的Book.java类用来传递数据

        包com.example.bookserver.aidl;      进口android.os.Parcel;   进口android.os.Parcelable;/* *   *由三星、name=" +名字+ \”+   '} ';   }      @Override   公共int describeContents () {   返回0;   }      @Override   公共空间writeToParcel(包裹dest, int旗帜){   dest.writeInt (this.id);   dest.writeString (this.name);   }      公众书(){   }      保护书(包裹){   这一点。id=in.readInt ();   this.name=in.readString ();   }      公共静态最终Parcelable.Creator创造者=new Parcelable.Creator () {   @Override   公共图书createFromParcel(包裹){   返回的新书(源);   }      @Override   公众书[]newArray (int大小){   返回的新书(大小);   }   };   }      之前      

最后我们来写一个服务用于客户端绑定

        包com.example.bookserver.service;      进口android.app.Service;   进口android.content.Intent;   进口android.os.Binder;   进口android.os.IBinder;   进口android.os.RemoteException;      进口com.example.bookserver.aidl.Book;   进口com.example.bookserver.aidl.IBookManager;      进口并不知道;   进口java.util.concurrent.CopyOnWriteArrayList;         公开课BookService延伸服务{   私人CopyOnWriteArrayListboookList=new CopyOnWriteArrayList ();   公共BookService () {      }   粘结剂粘结剂=new IBookManager.Stub () {      @Override   公共空basicTypes (int anInt长,布尔aBoolean浮动,双aDouble,字符串aString)抛出RemoteException {      }      @Override   公共ListgetBook()抛出RemoteException {   返回boookList;   }      @Override   公共布尔向(本书)抛出RemoteException {   返回boookList.add(书);   }   };   @Override   公共内部alt=" Android AIDL实现两个应用程序间的跨进程通信实例">

  

首先我们要讲AndroidStudio通过AIDL生成的粘合剂导入到客户端中并将书。java也导入到客户端中
  然后写进行服务的绑定

        包com.example.bookclient;      进口android.app.Service;   进口android.content.ComponentName;   进口android.content.Context;   进口android.content.Intent;   进口android.content.ServiceConnection;   进口android.content.pm.PackageManager;   进口android.content.pm.ResolveInfo;   进口android.os.IBinder;   进口android.util.Log;      进口com.example.bookserver.aidl.IBookManager;      进口并不知道;/* *   *由三星>   包com.example.bookclient;      进口android.os.Bundle;   进口android.os.RemoteException;   进口android.support.v7.app.AppCompatActivity;   进口android.util.Log;   进口android.view.View;   进口android.widget.Button;      进口com.example.bookserver.aidl.Book;   进口com.example.bookserver.aidl.IBookManager;      公开课MainActivity延伸AppCompatActivity {   IBookManager mBookService;   @Override   保护无效onCreate(包savedInstanceState) {   super.onCreate (savedInstanceState);   setContentView (R.layout.activity_main);   按钮按钮=(按钮)findViewById (R.id.button);   按钮addButton=(按钮)findViewById (R.id.button3);   按钮findButton=(按钮)findViewById (R.id.button2);   BookServiceManager.getInstance (getApplication ()) .connectService ();   按钮。setOnClickListener(新View.OnClickListener () {      @Override   公共空间onClick(查看v) {      mBookService=BookServiceManager.getInstance (getApplication ()) .getBookServie ();      }   });      addButton。setOnClickListener(新View.OnClickListener () {      @Override   公共空间onClick(查看v) {   书书=new ();   book.setId (2345);   书。setName(“添加一个书! !”);   尝试{   mBookService.addBook(书);   }抓住RemoteException (e) {   e.printStackTrace ();   }      }   });      findButton。setOnClickListener(新View.OnClickListener () {      @Override   公共空间onClick(查看v) {      尝试{   日志。d (“MainActivity mBookService.getBook () .toString ());   }抓住RemoteException (e) {   e.printStackTrace ();   }      }   });   }   }      

Android AIDL实现两个应用程序间的跨进程通信实例