ch029 Android(安卓)service aidl
--------------------------------------------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;
}
}
--------------------------------------------效果---------------------------------------------------
点击顺序【add】→【add】→【add】→【list】
<!--EndFragment-->
更多相关文章
- Android属性动画
- android 开源项目汇总
- Android(安卓)API 指南
- Android(安卓)OkHttp的Cookie自动化管理
- 图解 Android(安卓)Handler 线程消息机制
- 图解 Android(安卓)Handler 线程消息机制
- Android调用WebService系列之KSoap2对象解析
- 【android工程转为lib工程后提示'R.id.xxx不能作为case语句的表
- Android调用WebService系列之KSoap2对象解析