android import机制,Android IPC 机制【3】--AIDL[1]

本文展示了如何使用Android的AIDL(Android Interface Definition Language)来创建接口IBookManager,定义Book类,并在服务端(BookManagerService)和客户端(MainActivity)之间进行数据交换。服务端创建并维护了一个书籍列表,客户端通过AIDL接口获取和添加书籍。
摘要由CSDN通过智能技术生成

声明接口  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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值