ch029 Android service aidl

--------------------------------------------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】

<!--EndFragment-->

猜你喜欢

转载自fangyong2006.iteye.com/blog/1754363