`

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-->
  • 大小: 89.8 KB
  • 大小: 3 KB
分享到:
评论

相关推荐

    aidl.rar_AIDL_AIDL.rar_android AIDL service_android service_andr

    AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于在不同进程间进行通信,特别是当服务(Service)需要与客户端(如Activity)跨进程交互时。AIDL帮助开发者定义接口,使得...

    Android service aidl编写示例(Android Studio/eclipse)

    在Android应用开发中,Service和AIDL(Android Interface Definition Language)是两个重要的组件。Service用于在后台执行长时间运行的任务,而AIDL则用于进程间通信(IPC, Inter-Process Communication)。下面将...

    Android服务Aidl的示例demo

    Android下Aidl的使用,详细请参见博客:http://www.cnblogs.com/plokmju/p/android_Service_aidl_NormalType.html 和 http://www.cnblogs.com/plokmju/p/android_Service_aidl_CustomType.html

    Android之Service AIDL 远程服务 实现比较大小

    Android之Service AIDL 远程服务 实现比较大小 先运行服务端 再运行客户端

    android studio aidl demo

    在Android Studio中,创建AIDL文件通常是在服务(Service)所在的目录下新建一个`.aidl`扩展名的文件。例如,我们可以创建一个名为`IAidlInterface.aidl`的文件,然后在其中定义服务的接口方法: ```aidl package ...

    Android RemoteService AIDL 方式实现

    现在,我们来详细探讨如何通过AIDL在Android中实现RemoteService。 首先,让我们理解AIDL的基本概念。AIDL本质上是一个接口定义语言,它允许你在Android应用中定义一套接口,这些接口可以被其他应用所调用。当你...

    Android Service讲解 和 aidl 实现

    在Android应用开发中,`Service`和`AIDL(Android Interface Definition Language)`是两个非常重要的组件,它们分别用于后台长时间运行的任务和服务间通信。本文将深入探讨这两个概念以及如何通过`AIDL`来实现服务...

    android_aidl例子

    在Android开发中,AIDL(Android Interface Definition Language)是一种重要的工具,用于实现应用程序间的跨进程通信(IPC,Inter-Process Communication)。AIDL使得一个应用能够暴露其服务给其他应用调用,即使...

    android的aidl解析

    **Android AIDL解析** 在Android系统中,AIDL(Android Interface Definition Language)是一种接口定义语言,用于实现进程间通信(IPC, Inter-Process Communication)。它允许应用程序组件在不同进程中运行并相互...

    AndroidAIDL

    **Android AIDL(Android Interface Definition Language)详解** 在Android系统中,进程间的通信(IPC, Inter-Process Communication)是至关重要的,特别是在开发大型、复杂的应用时。AIDL(Android Interface ...

    Android使用AIDL实现进程间通信

    Android提供多种IPC方式,其中AIDL(Android Interface Definition Language)是一种强大的工具,用于定义服务接口并使得不同进程间能透明地调用对方的方法。本篇文章将深入探讨如何在Android中使用AIDL来实现进程间...

    android service+aidl应用

    在这个"android service+aidl应用"中,可能包含了一个示例项目`serriveTest`,它展示了如何结合Service和AIDL来实现跨进程通信。项目中可能有一个Service,通过AIDL定义的接口对外提供服务,例如播放音乐。客户端...

    android中aidl的基本应用

    描述 :整理了下android中的aidl, 项目中主要是用作于Activity和Service之间进行跨进程的通信和调用,定义了几种基本类型的接口,其中涵盖了自定义参数类型的传递。 注意: 解压后有两个android程序,一个client端 ...

    Android项目之AidlDemo(简单aidl的例子)

    Android项目之AidlDemo(简单的aidl的例子)。AIDL是Android中IPC(Inter-Process Communication)方式中的一种,AIDL是Android Interface definition language的缩写。需要的小伙伴自请下载。

    深入理解aidl&service;

    深入理解aidl和service机制。 aidl是android进行系统间通信的借口描述语言,仔细分析由aidl生成的java类,你会发现code是用的是proxy design pattern,能看到这层就会觉得google的设计其实真的是很巧妙。如果需要...

    Android的AIDL例子

    **Android的AIDL(Android Interface Definition Language)是Google为Android平台设计的一种接口定义语言,用于在Android应用程序的不同组件之间实现进程间通信(IPC,Inter-Process Communication)。在本示例中,...

    Android Studio编写AIDL文件后如何实现自动编译生成

    在目录src/main 下新建了aidl 文件夹之后,在aidl文件夹中也创建了相同的包路径, 创建AIDL文件 XXX.aidl 如果XXX.aidl引用了一个java下的model例如引用了a.b.c.Model; 则需要在XXX.aidl文件中声明import a.b.c....

    Android Studio实现Service AIDL

    为使应用程序之间能够彼此通信,Android提供了IPC (Inter Process Communication,进程间通信)的一种独特实现: AIDL (Android Interface Definition Language, Android接口定义语言)。 建立两个Android项目,...

    Service AIDL实例

    在Android系统中,AIDL(Android Interface Definition Language)是一种接口定义语言,用于处理应用程序间的跨进程通信(IPC,Inter-Process Communication)。当我们需要一个应用程序组件(如服务Service)与另一...

    Android aidl Binder框架浅析

    **Android aidl Binder框架浅析** 在Android系统中,服务间的通信是通过Binder机制实现的,它是Android系统中进程间通信(IPC)的核心组件。Binder框架允许不同进程间的对象互相调用方法,使得数据和操作可以在不同...

Global site tag (gtag.js) - Google Analytics