本例子利用AIDL实现了进程间图片的传输。基本流程是:client端发送请求,server端下载byte类型的数据并通过接口函数回传。
由于底层是通过传输byte实现的,因此该例子还可以扩展为传输其他可与byte互相转换的复杂类型。
基本原理
整个工程含两个module,一个是client端(即app),另一个是server端。
server端实质上是定义并注册了一个service类。系统内所有其他进程皆可调用该服务进行下载。
调用的具体方法是给出所要下载文件的url,赋值给client端的urlString变量,然后绑定服务即可。
代码
准备工作
新建一个工程AIDLByteTest,再在工程名位置右键,新建一个module取名为aidlserver。
aidl文件的定义
server端,最重要的当然是aidl文件的定义。
// IByte.aidl
package netlab.mobicom.aidlserver;
// Declare any non-default types here with import statements
interface IByte {
byte[] getByteFromAIDL(String urlString);
}
定义好之后,将其复制到app module里与main相同的路径下。注意一定要直接复制,不要新建。然后,ctrl+F9 来make project。
编写service代码
package netlab.mobicom.aidlserver;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.annotation.Nullable;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class