Android AIDL原理
来源:互联网 发布:vba聊天软件 编辑:程序博客网 时间:2024/06/06 14:03
AIDL: Android Interface Define Language,Android接口定义语言
主要作用:可以用来定义进程间的通信接口
具体来讲,如果项目 B 想要访问项目 A 中的一些数据
1)在 项目 A 中创建好AIDL文件,在它里面定义好相关的接口:
package com.aidy.a.aidlservice;interface RemoteService {String doSomething();}
2)再定义一个Service,在Service中创建要给内部类继承于RemoteService.Stub
public class AService extends Service {@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn new AIBinder();}public class AIBinder extends RemoteService.Stub {@Overridepublic String doSomething() throws RemoteException {// TODO Auto-generated method stubreturn "test do something...";}}}
同时在AndroidMenifest.xml中进行声明:
<service android:name="com.aidy.a.AService" > <intent-filter> <action android:name="com.aidy.a.aidlservice.RemoteService" /> </intent-filter> </service>上述Action: com.aidy.a.aidlservice.RemoteService就是进程之间可以进行通信的一个契约ID
那么在 A 项目中我们想要使用该Service可以:
public class AMainActivity extends Activity {private AIBinder aIBinder = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent = new Intent("com.aidy.a.aidlservice.RemoteService");this.bindService(intent, new AServiceConnection(), Service.BIND_AUTO_CREATE);((Button) findViewById(R.id.button)).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubtry {Toast.makeText(AMainActivity.this, aIBinder.doSomething(), Toast.LENGTH_SHORT).show();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}private final class AServiceConnection implements ServiceConnection {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stubaIBinder = (AIBinder) service;}@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stubaIBinder = null;}}}工程 A 的目录结构:
现在有一个工程 B 想要与 A 进行通信:
1)将 A 当中的RemoteService.aidl文件拷贝到 B 当中来(保持RemoteService.aidl的包名不变)
调用如下:
public class BMainActivity extends Activity {private RemoteService remoteService = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent = new Intent("com.aidy.a.aidlservice.RemoteService");this.bindService(intent, new BServiceConnection(), Service.BIND_AUTO_CREATE);</span>((Button) findViewById(R.id.button)).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubtry {Toast.makeText(BMainActivity.this, remoteService.doSomething(), Toast.LENGTH_SHORT).show();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}private final class BServiceConnection implements ServiceConnection {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stubremoteService = RemoteService.Stub.asInterface(service);</span>}@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stubremoteService = null;}}}
在B中点击按钮就会执行对应的doSomething()操作
0 0
- Android AIDL原理
- 【Android】深入分析AIDL原理
- Android Studio 创建AIDL以及Binder 原理
- Android中AIDL的工作原理
- Android中AIDL的工作原理
- aidl原理
- 理解Android的AIDL原理之代理模式
- Android开发之AIDL实现原理解析(源代码分享 )
- Android 自定义AIDL的实现与通信原理
- 【Android】AIDL原理以及基本类型数据传递
- Android AIDL 双向调用的使用及相关原理
- Android Binder 全解析(3) -- AIDL原理剖析
- Android探索之旅 | AIDL原理和实例讲解
- Android Binder 全解析(3) -- AIDL原理剖析
- Android探索之旅 | AIDL原理和实例讲解
- Android——AIDL基础实现demo以及原理探究
- 换个角度理解Android的AIDL原理
- Android aidl
- grub 出现错误
- OpenCV Error::: bad flag(parameter or structure field)(Unrecognized or unsupported array type)
- 140702
- RDF
- 随机打印50个随机(4-10长度)的字符串
- Android AIDL原理
- 使用HttpClient发送GET请求
- 【数字图像处理之(四)】用图像增强谈灰度直方图
- 黑马程序员——黑马学习日志之四 Java基础——数组
- LR
- 视频编解码学习之一:理论基础
- Oracle merge使用
- JTA(JAVA Transaction Api)事务
- 有关UIView、subview的几个基础知识点-IOS开发 (实例)