本文为大家分享了Android AIDL实现两个应用程序间的跨进程通信实例,供大家参考,具体内容如下
<强> 1服务端创建强>
首先需要创建一个Android工程然后创建AIDL文件,创建AIDL文件主要为了生成继承了粘合剂的存根类,以便应用活页夹进行进程间通信
servier端结构如下
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 公共List getBook()抛出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实现两个应用程序间的跨进程通信实例