--------------------------------------------AndroidManifest.xml---------------------------------

<manifestxmlns: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>

<actionandroid:name="android.intent.action.MAIN"/>

<categoryandroid:name="android.intent.category.LAUNCHER"/>

</intent-filter>

</activity>

<serviceandroid:enabled="true"android:name=".RemoteService">

<intent-filter>

<actionandroid:name="com.kawa.ch30.aidl.IMyService"/>

</intent-filter>

</service>

</application>

</manifest>

--------------------------------------------layoutactivity_main.xml---------------------------

<LinearLayoutxmlns: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>

--------------------------------------------ActivityMainActivity.java----------------------------

packagecom.kawa.ch30;

importjava.util.List;

importandroid.app.Activity;

importandroid.content.ComponentName;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.content.ServiceConnection;

importandroid.os.Bundle;

importandroid.os.IBinder;

importandroid.os.RemoteException;

importandroid.util.Log;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.Toast;

importcom.kawa.ch30.aidl.IMyService;

importcom.kawa.ch30.aidl.Person;

publicclassMainActivityextendsActivity{

privateButtonbtn_add;

privateButtonbtn_list;

privateIMyServicemRemoteService;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViews();

setListeners();

/*Activity绑定指定的Service*/

bindService(newIntent("com.kawa.ch30.aidl.IMyService"),mRemoteConnection,

Context.BIND_AUTO_CREATE);

}

privatevoidfindViews(){

btn_add=(Button)findViewById(R.id.btn_add);

btn_list=(Button)findViewById(R.id.btn_list);

}

privatevoidsetListeners(){

btn_add.setOnClickListener(onClickListener);

btn_list.setOnClickListener(onClickListener);

}

/*Activity绑定Service的状态监听*/

privateServiceConnectionmRemoteConnection=newServiceConnection(){

@Override

publicvoidonServiceDisconnected(ComponentNameparamComponentName){

mRemoteService=null;

Log.v("aidl","onServiceDisconnected()");

}

@Override

publicvoidonServiceConnected(ComponentNameparamComponentName,

IBinderparamIBinder){

mRemoteService=IMyService.Stub.asInterface(paramIBinder);

Log.v("aidl","onServiceConnected()");

}

};

privateOnClickListeneronClickListener=newOnClickListener(){

@Override

publicvoidonClick(Viewview){

switch(view.getId()){

caseR.id.btn_add://添加事件

Personperson=newPerson();

person.setAge(100);

person.setName("fy");

person.setTelNumber("12580");

try{

mRemoteService.savePersonInfo(person);//保存

}catch(RemoteExceptione){

e.printStackTrace();

Log.v("aidl",e.getMessage());

}

break;

caseR.id.btn_list://列表事件

try{

//获取后台Service数据

List<Person>personList=mRemoteService.getAllPerson();

if(null!=personList){

Log.v("aidl","personListsize:"+personList.size());

Toast.makeText(MainActivity.this,

"personListsize:"+personList.size(),Toast.LENGTH_SHORT)

.show();

}

}catch(RemoteExceptione){

e.printStackTrace();

}

break;

}

}

};

}

--------------------------------------------ServiceRemoteService.java-------------------------

packagecom.kawa.ch30;

importjava.util.LinkedList;

importjava.util.List;

importcom.kawa.ch30.aidl.IMyService;

importcom.kawa.ch30.aidl.Person;

importandroid.app.Service;

importandroid.content.Intent;

importandroid.os.IBinder;

importandroid.os.RemoteException;

publicclassRemoteServiceextendsService{

privateLinkedList<Person>personList=newLinkedList<Person>();

publicRemoteService(){

}

@Override

publicIBinderonBind(IntentparamIntent){

returnmBinder;

}

privatefinalIMyService.StubmBinder=newIMyService.Stub(){

@Override

publicvoidsavePersonInfo(Personperson)throwsRemoteException{

if(null!=person){

personList.add(person);

}

}

@Override

publicList<Person>getAllPerson()throwsRemoteException{

returnpersonList;

}

};

}

--------------------------------------------aidl目录Person.aidl---------------------------------

packagecom.kawa.ch30.aidl;

parcelablePerson;

--------------------------------------------aidl目录IMyService.aidl----------------------------

packagecom.kawa.ch30.aidl;

importjava.util.List;

importcom.kawa.ch30.aidl.Person;

interfaceIMyService{

voidsavePersonInfo(inPersonperson);

List<Person>getAllPerson();

}

--------------------------------------------aidl目录Person.java--------------------------------

packagecom.kawa.ch30.aidl;

importandroid.os.Parcel;

importandroid.os.Parcelable;

/**

*

*项目名称:com.kawa.ch30

*

*类名称:Person

*

*类描述:

*

*通过writeToParcel将你的对象映射成Parcel对象,

*

*再通过createFromParcel将Parcel对象映射成你的对象。

*

*也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,

*

*在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,

*

*因此写的顺序和读的顺序必须一致

*

*创建人:fy

*

*创建时间:2012-10-5上午9:57:38

*

*Copyright(c)方勇-版权所有

*/

publicclassPersonimplementsParcelable{

privateStringname;

privateStringtelNumber;

privateintage;

publicPerson(){

}

publicPerson(Parcelparcel){

name=parcel.readString();

telNumber=parcel.readString();

age=parcel.readInt();

}

/*添加一个静态成员,名为CREATOR,该对象实现了Parcelable.Creator接口*/

publicstaticfinalParcelable.Creator<Person>CREATOR=

newParcelable.Creator<Person>(){

@Override

publicPersoncreateFromParcel(ParcelparamParcel){

returnnewPerson(paramParcel);

}

@Override

publicPerson[]newArray(intsize){

returnnewPerson[size];

}

};

@Override

publicintdescribeContents(){

return0;

}

/*把javanbean中的数据写到Parcel*/

@Override

publicvoidwriteToParcel(ParcelparamParcel,intparamInt){

paramParcel.writeString(name);

paramParcel.writeString(telNumber);

paramParcel.writeInt(age);

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicStringgetTelNumber(){

returntelNumber;

}

publicvoidsetTelNumber(StringtelNumber){

this.telNumber=telNumber;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

}

--------------------------------------------效果---------------------------------------------------

ch029 Android service aidl_第1张图片

点击顺序【add】→【add】→【add】→【list】

<!--EndFragment-->

更多相关文章

  1. android 中通过 aidl 传递map对象
  2. Android 各种布局技术-五大布局对象
  3. Activity对象的onCreate方法真是Android程序的入口吗?
  4. 25、Android中通过Intent传递对象、集合问题
  5. Android根据联系人姓名首字符顺序读取通讯录
  6. Android高手进阶教程(十七)之---Android中Intent传递对象的两种
  7. Android中将资源文件转为Bitmap对象

随机推荐

  1. android listView
  2. Android复习(十)
  3. Android核心基础(四)
  4. Android(安卓)封装http请求的工具类
  5. android 監聽系統屬性變化的方法
  6. Android常用的工具类-收藏用
  7. Android(安卓)单位
  8. Android使用HttpURLConnection提交数据
  9. android 定时发送短信
  10. android坐标