--------------------------------------------AndroidManifest.xml---------------------------------
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kawa.ch30"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:enabled="true" android:name=".RemoteService">
<intent-filter>
<action android:name="com.kawa.ch30.aidl.IMyService" />
</intent-filter>
</service>
</application>
</manifest>
--------------------------------------------layout activity_main.xml---------------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn_add"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="add" >
</Button>
<Button
android:id="@+id/btn_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="list" >
</Button>
</LinearLayout>
--------------------------------------------Activity MainActivity.java----------------------------
package com.kawa.ch30;
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 android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import com.kawa.ch30.aidl.IMyService;
import com.kawa.ch30.aidl.Person;
public class MainActivity extends Activity {
private Button btn_add;
private Button btn_list;
private IMyService mRemoteService;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViews();
setListeners();
/*Activity绑定指定的Service*/
bindService(new Intent("com.kawa.ch30.aidl.IMyService"), mRemoteConnection,
Context.BIND_AUTO_CREATE);
}
private void findViews() {
btn_add = (Button) findViewById(R.id.btn_add);
btn_list = (Button) findViewById(R.id.btn_list);
}
private void setListeners() {
btn_add.setOnClickListener(onClickListener);
btn_list.setOnClickListener(onClickListener);
}
/* Activity绑定Service的状态监听 */
private ServiceConnection mRemoteConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName paramComponentName) {
mRemoteService = null;
Log.v("aidl", "onServiceDisconnected()");
}
@Override
public void onServiceConnected(ComponentName paramComponentName,
IBinder paramIBinder) {
mRemoteService = IMyService.Stub.asInterface(paramIBinder);
Log.v("aidl", "onServiceConnected()");
}
};
private OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_add:// 添加事件
Person person = new Person();
person.setAge(100);
person.setName("fy");
person.setTelNumber("12580");
try {
mRemoteService.savePersonInfo(person);// 保存
} catch (RemoteException e) {
e.printStackTrace();
Log.v("aidl", e.getMessage());
}
break;
case R.id.btn_list:// 列表事件
try {
// 获取后台Service数据
List<Person> personList = mRemoteService.getAllPerson();
if (null != personList) {
Log.v("aidl", "person List size:" + personList.size());
Toast.makeText(MainActivity.this,
"person List size:" + personList.size(), Toast.LENGTH_SHORT)
.show();
}
} catch (RemoteException e) {
e.printStackTrace();
}
break;
}
}
};
}
--------------------------------------------Service RemoteService.java-------------------------
package com.kawa.ch30;
import java.util.LinkedList;
import java.util.List;
import com.kawa.ch30.aidl.IMyService;
import com.kawa.ch30.aidl.Person;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
public class RemoteService extends Service {
private LinkedList<Person> personList = new LinkedList<Person>();
public RemoteService() {
}
@Override
public IBinder onBind(Intent paramIntent) {
return mBinder;
}
private final IMyService.Stub mBinder = new IMyService.Stub() {
@Override
public void savePersonInfo(Person person) throws RemoteException {
if (null != person) {
personList.add(person);
}
}
@Override
public List<Person> getAllPerson() throws RemoteException {
return personList;
}
};
}
--------------------------------------------aidl目录 Person.aidl---------------------------------
package com.kawa.ch30.aidl;
parcelable Person;
--------------------------------------------aidl目录 IMyService.aidl----------------------------
package com.kawa.ch30.aidl;
import java.util.List;
import com.kawa.ch30.aidl.Person;
interface IMyService {
void savePersonInfo(in Person person);
List<Person> getAllPerson();
}
--------------------------------------------aidl目录 Person.java--------------------------------
package com.kawa.ch30.aidl;
import android.os.Parcel;
import android.os.Parcelable;
/**
*
* 项目名称:com.kawa.ch30
*
* 类名称:Person
*
* 类描述:
*
* 通过writeToParcel将你的对象映射成Parcel对象,
*
* 再通过createFromParcel将Parcel对象映射成你的对象。
*
* 也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,
*
* 在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,
*
* 因此写的顺序和读的顺序必须一致
*
* 创建人:fy
*
* 创建时间:2012-10-5 上午9:57:38
*
* Copyright (c) 方勇-版权所有
*/
public class Person implements Parcelable {
private String name;
private String telNumber;
private int age;
public Person() {
}
public Person(Parcel parcel) {
name = parcel.readString();
telNumber = parcel.readString();
age = parcel.readInt();
}
/* 添加一个静态成员,名为CREATOR,该对象实现了Parcelable.Creator接口 */
public static final Parcelable.Creator<Person> CREATOR =
new Parcelable.Creator<Person>() {
@Override
public Person createFromParcel(Parcel paramParcel) {
return new Person(paramParcel);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public int describeContents() {
return 0;
}
/* 把javanbean中的数据写到Parcel */
@Override
public void writeToParcel(Parcel paramParcel, int paramInt) {
paramParcel.writeString(name);
paramParcel.writeString(telNumber);
paramParcel.writeInt(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelNumber() {
return telNumber;
}
public void setTelNumber(String telNumber) {
this.telNumber = telNumber;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
--------------------------------------------效果---------------------------------------------------
点击顺序【add】→【add】→【add】→【list】