AIDL--------应用之间的通信接口

在下面例子中04Service中添加aidl包包里定义好接口 接口文件名后缀为.aidl

package com.example.aidl;

interface IRemoteService
{
void print(String msg);
String getName();

}

在04 client中也有这样一个包 这个包就成为一个接口   Service里实现接口  client中可以调用注意

Service中定义好service的action  client中绑定服务时用这个action

<service android:name=".RemoteService">
<intent-filter >
<action android:name="com.example.service04aidl.RemoteService"/>
</intent-filter>
</service>

绑定时用到

bindService(new Intent("com.example.service04aidl.RemoteService"),conn,BIND_AUTO_CREATE);

客户端每次绑定都会创建一个与客户端activity绑定的Service  activity销毁服务也会销毁

 1 package com.example.service04_client;
 2
 3 import android.app.Activity;
 4 import android.content.ComponentName;
 5 import android.content.Intent;
 6 import android.content.ServiceConnection;
 7 import android.os.Bundle;
 8 import android.os.IBinder;
 9 import android.os.RemoteException;
10 import android.view.View;
11 import android.widget.Toast;
12
13 import com.example.aidl.IRemoteService;
14
15 public class MainActivity extends Activity {
16
17     IRemoteService remoteService;
18     ServiceConnection conn=new ServiceConnection() {
19         @Override
20         public void onServiceDisconnected(ComponentName name) {
21
22         }
23
24         @Override
25         public void onServiceConnected(ComponentName name, IBinder service) {
26             remoteService=IRemoteService.Stub.asInterface(service);
27         }
28     };
29
30     @Override
31     protected void onCreate(Bundle savedInstanceState) {
32         super.onCreate(savedInstanceState);
33         setContentView(R.layout.activity_main);
34
35         bindService(new Intent("com.example.service04aidl.RemoteService"),conn,BIND_AUTO_CREATE);
36     }
37     public void print(View v) throws RemoteException
38     {
39         if(remoteService!=null)
40         remoteService.print("hello,service");
41     }
42     public void getRemoteName(View v) throws RemoteException
43     {
44         if(remoteService!=null)
45         Toast.makeText(getApplicationContext(), remoteService.getName(), 1).show();
46     }
47
48 }

04Service—mainActivity

 1 package com.example.service04aidl;
 2
 3 import com.example.aidl.IRemoteService;
 4
 5 import android.app.Service;
 6 import android.content.Intent;
 7 import android.os.IBinder;
 8 import android.os.RemoteException;
 9 import android.util.Log;
10
11 public class RemoteService extends Service {
12
13     private IRemoteService.Stub stub=new IRemoteService.Stub() {
14         @Override
15         public void print(String msg) throws RemoteException {
16             Log.i("debug", "RemoteService---"+msg);
17         }
18         @Override
19         public String getName() throws RemoteException {
20             return "RemoteService";
21         }
22     };
23     @Override
24     public IBinder onBind(Intent intent) {
25         // TODO Auto-generated method stub
26         return stub;
27     }
28
29 }

04Service--RemoteService

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.service04aidl"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6
 7     <uses-sdk
 8         android:minSdkVersion="8"
 9         android:targetSdkVersion="17" />
10
11     <application
12         android:allowBackup="true"
13         android:icon="@drawable/ic_launcher"
14         android:label="@string/app_name"
15         android:theme="@style/AppTheme" >
16         <activity
17             android:name="com.example.service04aidl.MainActivity"
18             android:label="@string/app_name" >
19             <intent-filter>
20                 <action android:name="android.intent.action.MAIN" />
21
22                 <category android:name="android.intent.category.LAUNCHER" />
23             </intent-filter>
24         </activity>
25         <service android:name=".RemoteService">
26             <intent-filter >
27                 <action android:name="com.example.service04aidl.RemoteService"/>
28             </intent-filter>
29         </service>
30     </application>
31
32 </manifest>

04----xml

 1 package com.example.service04_client;
 2
 3 import android.app.Activity;
 4 import android.content.ComponentName;
 5 import android.content.Intent;
 6 import android.content.ServiceConnection;
 7 import android.os.Bundle;
 8 import android.os.IBinder;
 9 import android.os.RemoteException;
10 import android.view.View;
11 import android.widget.Toast;
12
13 import com.example.aidl.IRemoteService;
14
15 public class MainActivity extends Activity {
16
17     IRemoteService remoteService;
18     ServiceConnection conn=new ServiceConnection() {
19         @Override
20         public void onServiceDisconnected(ComponentName name) {
21
22         }
23
24         @Override
25         public void onServiceConnected(ComponentName name, IBinder service) {
26             remoteService=IRemoteService.Stub.asInterface(service);
27         }
28     };
29
30     @Override
31     protected void onCreate(Bundle savedInstanceState) {
32         super.onCreate(savedInstanceState);
33         setContentView(R.layout.activity_main);
34
35         bindService(new Intent("com.example.service04aidl.RemoteService"),conn,BIND_AUTO_CREATE);
36     }
37     public void print(View v) throws RemoteException
38     {
39         if(remoteService!=null)
40         remoteService.print("hello,service");
41     }
42     public void getRemoteName(View v) throws RemoteException
43     {
44         if(remoteService!=null)
45         Toast.makeText(getApplicationContext(), remoteService.getName(), 1).show();
46     }
47
48 }

client

时间: 2024-12-26 20:26:19

AIDL--------应用之间的通信接口的相关文章

Android AIDL 进程之间的通信

关于IPC应该不用多介绍了,Android系统中的进程之间不能共享内存,那么如果两个不同的应用程序之间需要通讯怎么办呢?比如公司的一个项目要更新,产品的需求是依附于当前项目开发一个插件,但是呢这个插件功能以及界面比较复杂,不能和当前项目在一个进程中,同时呢,还要用到当前项目中已经写好了的一些东西,那么因为新开发的依附于当前项目的插件和当前项目不是一个进程,因此不能共享内存,就出现了问题,于是,需要提供一些机制在不同进程之间进行数据通信,这个机制就是AIDL了. 一.一个android中AIDL的

Android学习笔记二十六.跨进程调用Service(AIDL Service)

跨进程调用Service(AIDL Service) 一.AIDL Service 1.什么是AIDL Service? AIDL,即Android Interface Definition Language.是Android用于定义远程接口,AIDL接口定义语言的语法比较简单,这种接口定义语言并不是真正的编程语言,它只是定义两个进程之间的通信接口.AIDL的语法与Java接口很相似,但存在如下几点差异: (1)AIDL定义接口的源代码必须以.aidl结尾; (2)AIDL接口中用到数据类型,除

AIDL在音乐播放器中的应用

一.AIDL简介 由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象.在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想访问的话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界.通过代码来实现这个数据传输过程是冗长,但是Android为开发者提供了AIDL工具来处理这项工作. AIDL (Android Interface Definition Language)是一种IDL语言,用于生成可

AIDL完全学习手册

1.引言 打开Android源码,会发现在有些包的里面,在各个java类下面总是会有若干白色图标的文件,后缀为aidl.双击打开,也是一篇黑白,没有java代码的关键字变色突示,写法似java又总有些不同.这个文件好生怪异! 它到底是什么?有什么作用?怎么使用? 2.释义 AIDL(Android Interface Definition Language,Android接口定义语言). 很多文章在引出AIDL之前,都会问"Android进程间如何通信?",然后说出"是的,用

Android IPC

跨进程调用service, AIDL定义进程之间的通信接口,AIDL文件语法和定义几个java接口语法类似,只不过扩展名是.aidl IDE会自动为接口提供实现,在接口中会定义一个名为Stub的内部static类,实现定义的接口,继承Binder类,Binder实现了IBinder接口 AIDL service返回给client端的是IBinder对象的代理,在client端也要引用AIDL接口文件,也会生成接口的响应实现 aidl.exe工具为AIDL文件生成的代码主要完成下面的功能: 定义一

Android -Services 使用简介

Android Services 四大组件之一,主要用于后台长时间运行.没有界面.这里讲解两种services的启动还有AIDL通信方式. 1.startservices a.建立继承services的类,复写方法(本地服务) public class MyServices extends Service { private static final String TAG="TestTag"; @Override public IBinder onBind(Intent arg0) {

Android Framework 记录之一

简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有深究,现在研究framework框架层了. 原文地址:http://blog.csdn.net/banketree/article/details/24718899 记录 1.下载源码,目录如下: 2.Android系统的层次如下: 3.项目目录简单分析如下: 4.telphony目录 文件 描述 CellIdentityCdma //描述电信通信标识 CellIdentityGsm 描述移动通信标识 CellIdentityLte 描述

19、android面试题整理(自己给自己充充电吧)

(转载,出处丢失,请原作者原谅,如有意见,私信我我会尽快删除本文) JAVA 1.GC是什么? 为什么要有GC?GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法. 2.XML包括哪些解释技术,区别是什么?DOM和SAXDOM将文档解析成一颗文档树,可在节点上进行遍历

Android Framework 简介

Android Framework 简介 简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有详记,结果被很多公司技术人员鄙视了,为了减少自己的短板,重新复习了一遍C++.java.Android的开发,现在开始研究应用框架层了. 记录 1.下载源码,目录如下: 2.Android系统的层次如下: 3.项目目录简单分析如下: 4.telphony目录 文件 描述 CellIdentityCdma //描述电信通信标识 CellIdentityGsm 描述移动通信标识 CellIdentit