声明接口  IBookManager.aidl

package com.shieh.android.ipctest.aidl;

import com.shieh.android.ipctest.aidl.Book;

interface IBookManager{

List getBookList();

void addBook(in Book book);

}

2.在aidl中声明Book类,Book.aidl

package com.shieh.android.ipctest.aidl;

parcelable Book;

3.服务端实现 BookManagerService.java

package com.shieh.android.ipctest.service;

import java.util.List;

import java.util.concurrent.CopyOnWriteArrayList;

import com.shieh.android.ipctest.aidl.Book;

import com.shieh.android.ipctest.aidl.IBookManager;

import android.app.Service;

import android.content.Intent;

import android.os.Binder;

import android.os.IBinder;

import android.os.RemoteException;

public class BookManagerService extends Service{

private CopyOnWriteArrayList mBookList

=new CopyOnWriteArrayList();

@Override

public void onCreate() {

super.onCreate();

mBookList.add(new Book(1, "Book1"));

mBookList.add(new Book(2, "Book2"));

mBookList.add(new Book(3, "Book3"));

}

private Binder mBinder = new IBookManager.Stub() {

@Override

public List getBookList() throws RemoteException {

return mBookList;

}

@Override

public void addBook(Book book) throws RemoteException {

mBookList.add(book);

}

};

@Override

public IBinder onBind(Intent intent) {

return mBinder;

}

}

4.客户端实现 MainActivity.java

package com.shieh.android.ipctest;

import java.util.List;

import android.app.Activity;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.content.ServiceConnection;

import android.os.Bundle;

import android.os.IBinder;

import android.os.RemoteException;

import android.util.Log;

import com.shieh.android.ipctest.aidl.Book;

import com.shieh.android.ipctest.aidl.IBookManager;

import com.shieh.android.ipctest.service.BookManagerService;

public class MainActivity extends Activity {

private static final String TAG = "MainActivity";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Intent intent = new Intent(this, BookManagerService.class);

bindService(intent , mConnection , Context.BIND_AUTO_CREATE);

}

private ServiceConnection mConnection = new ServiceConnection() {

@Override

public void onServiceDisconnected(ComponentName name) {

}

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

//绑定成功后将服务端返回的Binder转换为AIDL接口

//然后通过该接口去调用服务端的方法

IBookManager bookManager = IBookManager.Stub.asInterface(service);

try{

List list = bookManager.getBookList();

Log.i(TAG,"get book list , type : " + list.getClass().getCanonicalName());

Log.i(TAG,"get book list , list : " + list.toString());

Book newBook = new Book(4,"Book4");

Log.i(TAG,"add book:" + newBook);

List newList = bookManager.getBookList();

Log.i(TAG,"get book list , newlist : " + newList.toString());

}catch (RemoteException e){

e.printStackTrace();

}

}

};

@Override

protected void onDestroy() {

unbindService(mConnection);

super.onDestroy();

}

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐