为什么要使用aidl

Android系统中的进程之间不能共享内存,为了使其他的应用程序也可以访问本应用程序提供的服务的远程调用。这么说有有些太官方了,简单的理解就是新浪微博的SSO授权快速登录。你本地有Cilent和Service两个应用,使用aidl之后Client应用可以直接调用Service应用中的方法了。

使用注意

本地创建cilent和service两个应用,aidl文件必须要同包、同名、同方法。

Demo下载地址

http://download.csdn.net/detail/aaren_jiang/7494661

共有的.aidl文件

package com.chiang.aidl;interface RemoteSSO {String getPackageName();String getActivityName(String param);
}

Service端

这里是JAVA代码
public class AIDLService extends Service {private static final String TAG = "AIDLService";private void Log(String str) {Log.i(TAG, "----------" + str + "----------");} public void onCreate() {Log("service created");}public void onStart(Intent intent, int startId) {Log("service started id = " + startId);}public IBinder onBind(Intent t) {Log("service on bind");return mBinder;}public void onDestroy() {Log("service on destroy");super.onDestroy();}public boolean onUnbind(Intent intent) {Log("service on unbind");return super.onUnbind(intent);}public void onRebind(Intent intent) {Log("service on rebind");super.onRebind(intent);}/*** Service实现该方法,给远程Client调用*/private final RemoteSSO.Stub mBinder = new RemoteSSO.Stub() {@Overridepublic String getPackageName() throws RemoteException {Log.e(TAG, "remote call from client! current thread id = " + Thread.currentThread().getId());return "调用service获取包名";}@Overridepublic String getActivityName(String param) throws RemoteException {Log.e(TAG, "remote call from client! current thread id = " + Thread.currentThread().getId() +"  param:"+param);return "调用service获取activity名";}};
}

AndroidMainifest.xml文件的配置,只需要在application标签里增加service标签即可

<serviceandroid:name=".AIDLService"android:exported="true" ><intent-filter><!-- 这里的action是给cilent调用的标识 --><action android:name="com.chiang.aidlservice.aidl" /></intent-filter></service>

Clinet端

/*** 注意.aidl文件要和被调用的.aidl文件要是一样的包名、类名、方法名,否则你调用会错误* @author JiangHao**/
public class MainActivity extends Activity implements OnClickListener {public static final String TAG = "AIDL";private RemoteSSO remoteSSO;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//根据service的action名称来调用Intent intent = new Intent("com.chiang.aidlservice.aidl");bindService(intent, connection, Context.BIND_AUTO_CREATE);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.callRemote:{//远程调用if(remoteSSO==null){Toast.makeText(this, "等待连接...", Toast.LENGTH_SHORT).show();return;}try {Toast.makeText(this, "---"+remoteSSO.getActivityName("我去")+"---", Toast.LENGTH_SHORT).show();} catch (RemoteException e) {e.printStackTrace();Toast.makeText(this, "---错误---", Toast.LENGTH_SHORT).show();}break;}case R.id.cancalCall:{//注销unbindService(connection);break;}}}ServiceConnection connection=new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {Log.i(TAG, "注销连接!");remoteSSO = null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {Log.i(TAG, "连接成功!");remoteSSO = RemoteSSO.Stub.asInterface(service);}};}

Android中ail的作用和使用说明相关推荐

  1. android system.out.println,为什么“System.out.println”在Android中不起作用?

    为什么"System.out.println"在Android中不起作用? 我想在控制台中打印一些东西,这样我就可以调试它了.但出于某种原因,我的Android应用程序中没有打印任 ...

  2. not found for signing config ‘debug‘Android中meta-data的作用xmlns:tools=“http://schemas.android.com/

    目录 not found for signing config 'debug' Android中meta-data的作用 xmlns:tools="http://schemas.androi ...

  3. android中gradle的作用,Gradle 之 Android 中的应用

    在上一篇文章中 Gradle 之语言基础 Groovy 主要介绍了 Groovy 的基础语法(如果没有 Groovy 的基础,建议先看看上篇文章,如果可以动手敲一下里面的示例代码就更好不过了),也是为 ...

  4. android中接口的作用是什么意思,Android为什么要序列化

    android为什么要序列化?什么是序列化,怎么进行序列化 why 为什么要了解序列化?-- 进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这 ...

  5. android handler作用,Android中Handler的作用

    * Handler的定义: * 主要接受子线程发送的数据, 并用此数据配合主线程更新UI.当应用程序启动时, * Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控 ...

  6. android中uri的作用,Android UrlUri详细解析

    概述 在项目开发中,有时会遇到解析Url.Uri的需求,要从中得到链接中的相应字段.参数等.有多种实现方式,在这里总结一下应用到的. URL与URI的区别 Uri - 统一资源标志符 Url - 统一 ...

  7. android中接口的作用是什么意思,详解Android接口Interface的使用和意义

    本文介绍是Android的一个重要的东西,接口Interface,详解两个方面: (1)Java是继承的,接口Interface是可以多个的,恰恰弥补了这个缺点. (2)回调,接口Interface里 ...

  8. android中适配器的作用,适配器模式 在Android中的简单理解

    Android 在Android上提到适配器模式就会想到最常用的ListView和BaseAdapter 在这个功能的使用中,类似于适配器模式的对象适配器 例如在ListView中想用一个getVie ...

  9. settext 在android的作用,setText在android中不起作用

    我有这个代码在相应的数据库中添加数据. public class RegisterActivity extends Activity implements OnClickListener { SQLi ...

  10. android 中assets的作用和用法

    1.assets目录和res区别 Android系统为每个新设计的程序提供了/assets目录,这个目录保存的文件可以打包在程序里./res和/assets的不同点是,android不为/assets ...

最新文章

  1. python操作neo4j
  2. 你必须非常努力,才可以看起来毫不费力。
  3. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
  4. python怎么识别log函数_python中对数函数怎么表示
  5. tplink软件升级有用吗_TP-LINK路由器升级方法 | 吴文辉博客
  6. vdbench数据校验翻译
  7. 完全背包告诉你 2020 代表什么
  8. Epicor 完成和关闭工单
  9. SAP 因谁而腾飞?NetApp
  10. 刀口舔血,步步惊心!——Android中小开发者/团队广告盈利全攻略
  11. 15版计算机应用基础知识整理,[电脑基础知识]计算机应用基础.ppt
  12. 基于阿里云物联网的APP简单开发
  13. linux内核漏洞查询,GitHub - F1uYu4n/linux-kernel-exploits: linux-kernel-exploits Linux平台提权漏洞集合...
  14. 黑马 Java八股文面试题视频教程,Java面试八股文宝典(虚拟机篇)
  15. 【CS231n】斯坦福大学李飞飞视觉识别课程笔记(十一):反向传播笔记
  16. c++调用偏僻数据库db2
  17. python绘制时频图
  18. css 视频播放列表,jquery结合CSS实现的多样式多视频列表连播效果源码
  19. Ubuntu安装ping工具
  20. Unity 3D WebView 插件之WebViewPrefab API解析(四)

热门文章

  1. 自动化测试——selenium(完结篇)
  2. 二维码应用——门禁系统
  3. macd java 源代码_炒股知识一MACD详解
  4. form表单中@submit.prevent作用
  5. Excel的行或列数据倒序排列
  6. 微信、企业微信分享按钮隐藏问题
  7. 7-59 二元一次方程的解
  8. 【从嵌入式视角学习香山处理器】四、Chisel语言基础
  9. python和html和css什么关系什么区_Python 【第七章】:Html 和 CSS
  10. 5G NR 随机接入 总结