时间:2021-05-21
本文为大家分享了Android AIDL实现两个APP间的跨进程通信实例,供大家参考,具体内容如下
1 Service端创建
首先需要创建一个Android工程然后创建AIDL文件,创建AIDL文件主要为了生成继承了Binder的Stub类,以便应用Binder进行进程间通信
servier端结构如下
AIDL代码如下
// IBookManager.aidlpackage com.example.bookserver.aidl;// Declare any non-default types here with import statementsimport com.example.bookserver.aidl.Book;interface IBookManager { /** * Demonstrates some basic types that you can use as parameters * and return values in AIDL. */ void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString); List<Book> getBook(); boolean addBook(in Book book);}package com.example.bookserver.aidl;parcelable Book;之后创建一个实现了Parcelable的Book.java类用来传递数据
package com.example.bookserver.aidl;import android.os.Parcel;import android.os.Parcelable;/** * Created by SAMSUNG on 2016-09-07. */public class Book implements Parcelable { private int id; private String name ; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Book{" + "id=" + id + ", name='" + name + '\'' + '}'; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.id); dest.writeString(this.name); } public Book() { } protected Book(Parcel in) { this.id = in.readInt(); this.name = in.readString(); } public static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>() { @Override public Book createFromParcel(Parcel source) { return new Book(source); } @Override public Book[] newArray(int size) { return new Book[size]; } };}最后我们来写一个Service用于客户端绑定
package com.example.bookserver.service;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;import android.os.RemoteException;import com.example.bookserver.aidl.Book;import com.example.bookserver.aidl.IBookManager;import java.util.List;import java.util.concurrent.CopyOnWriteArrayList;public class BookService extends Service { private CopyOnWriteArrayList<Book> boookList = new CopyOnWriteArrayList<Book>(); public BookService() { } Binder binder = new IBookManager.Stub(){ @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { } @Override public List<Book> getBook() throws RemoteException { return boookList; } @Override public boolean addBook(Book book) throws RemoteException { return boookList.add(book); } }; @Override public IBinder onBind(Intent intent) { return binder; } @Override public void onCreate() { super.onCreate(); Book book = new Book(); book.setId(12345); book.setName("Book 1"); boookList.add(book); }}这样Server端就搞定了,接下来就该进行Client端的代码编写了
2 Client端
Client端结构如下
首先我们要讲AndroidStudio 通过AIDL生成的Binder导入到Client中并将Book.java也导入到Client中
然后写进行Service的绑定
最后对设置Button进行调用
package com.example.bookclient;import android.os.Bundle;import android.os.RemoteException;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import com.example.bookserver.aidl.Book;import com.example.bookserver.aidl.IBookManager;public class MainActivity extends AppCompatActivity { IBookManager mBookService ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); Button addButton = (Button) findViewById(R.id.button3); Button findButton = (Button) findViewById(R.id.button2); BookServiceManager.getInstance(getApplication()).connectService(); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { mBookService = BookServiceManager.getInstance(getApplication()).getBookServie(); } }); addButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Book book = new Book(); book.setId(2345); book.setName("add book!!"); try { mBookService.addBook(book); } catch (RemoteException e) { e.printStackTrace(); } } }); findButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { try { Log.d("MainActivity", mBookService.getBook().toString()); } catch (RemoteException e) { e.printStackTrace(); } } }); }}这样我们就实现了AIDL的不同APP的调用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Android编程实现AIDL(跨进程通信)的方法。分享给大家供大家参考,具体如下:一.概述:跨进程通信(AIDL),主要实现进程(应用)间数据共
前言同一个进程内实现接口回掉很简单,这里不做叙述,本文主要讲的是跨进程的接口回掉实现方式。有一种跨进程通信的方式就是使用AIDL,但是单纯的AIDL通信只可以实
AIDL是Android接口定义语言,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service的功能
本文介绍了Android进程间通信实践的示例代码,分享给大家,具体如下:因为线程间的内存是共享的,所以它们之间的通信简单,比如可以通过共享变量等方式实现。而进程
Android很多地方会涉及到进程间的通信,比如输入系统,那么进程间通信会涉及哪些内容呢?1、进程:负责读取和分发事件2、应用程序:负责处理输入事件上面这两个进