aidl(android 接口定义语言)
来源:互联网 发布:淘宝上买电器可靠吗 编辑:程序博客网 时间:2024/03/29 20:21
远程服务:调用者和服务在不同的工程代码里面。本地服务:调用者和服务在同一个工程代码里面。每一个应用程序都是运行在自己独立的进程里面的。进程操作系统分配内存空间的一个单位。进程的数据都是独立的。独立的内存空间。aidl:android interface definition language 安卓接口定义语言aidl文件都是公有的,没有访问权限修饰符IPC: inter process communication 进程间通讯绑定本地服务调用方法的步骤:1.在服务的内部创建一个内部类 提供一个方法,可以间接调用服务的方法private class MiddlePerson extends Binder implements IMiddlePerson{}2.实现服务的onbind方法,返回的就是中间人 MiddlePerson3.在activity 绑定服务。bindService();4.在服务成功绑定的时候 会执行一个方法 onServiceConnected 传递过来一个 IBinder对象5.强制类型转化 调用接口里面的方法。-------------------------------------------绑定远程服务调用方法的步骤:1.在服务的内部创建一个内部类 提供一个方法,可以间接调用服务的方法2.把暴露的接口文件的扩展名改为aidl文件 去掉访问修饰符 publicprivate class MiddlePerson extends IMiddlePerson.Stub{} IPC的子类,代理人 必须要实现一个方法,这个方法可以调用于服务的方法3.实现服务的onbind方法,返回的就是中间人 IMiddlePerson4.在activity 绑定服务。bindService();5.在服务成功绑定的时候 会执行一个方法 onServiceConnected 传递过来一个 IBinder对象6.IMiddlePerson.Stub.asInterface(binder) 调用接口里面的方法。==================绑定远程服务的流程=========================1.在 activity 调用 bindService() 去绑定服务, bindService(inten,new myCon(),BIND_AUTO_CREATE);需要传递一个叫 ServiceConntion的接口参数,用来返回两个回调 当服务被成功绑定, 当服务失去联系2.在服务里面 需要重写方法, onbind() 在服务被绑定的时侯 调用 返回一个 IBinder接口 对象(代理人) 接口定义,需要改成 aidl 用自动生成的IService.stub代理人 必须要实现一个方法,这个方法可以调用到服务的方法3.在activity 的onServiceConneted 得到中间人,使用aidl 自动生成 IService.stub.asInterFace()4.调用中间人的方法5.中间人调用服务的方法
远程的服务:public class RemoteService extends Service { @Override public void onCreate() { System.out.println("远程服务被创建了。。。"); super.onCreate(); } @Override public void onDestroy() { System.out.println("远程服务被销毁了。"); super.onDestroy(); } @Override public IBinder onBind(Intent intent) { return new MiddlePerson(); } private void methodInService(){ System.out.println("我是远程服务的方法,我被调用了。。。。"); } //1.创建一个中间人 远程服务继承的是ipc的一个实现类 private class MiddlePerson extends IMiddlePerson.Stub{ @Override public void callMethodInService() { methodInService(); } }}//创建隐士服务: <service android:name="com.itheima.remoteservice.RemoteService"> <intent-filter > <action android:name="com.itheima.remoteservice"/> </intent-filter> </service>
aidl文件package com.itheima.remoteservice; interface IMiddlePerson { /** * 调用服务里面的方法 */ void callMethodInService();}
//将远程的包和 aidl文件 复制过来//activity 绑定远程服务public class MainActivity extends Activity { private MyConn conn; private IMiddlePerson iMp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** * 绑定远程服务 * @param view */ public void bind(View view){ Intent intent = new Intent(); //调用的服务意图 intent.setAction("com.itheima.remoteservice"); conn = new MyConn(); bindService(intent, conn, BIND_AUTO_CREATE); } private class MyConn implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { iMp = IMiddlePerson.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { } } public void call(View view){ try { iMp.callMethodInService(); } catch (RemoteException e) { e.printStackTrace(); } } @Override protected void onDestroy() { unbindService(conn); super.onDestroy(); }}
0 0
- AIDL android接口定义语言
- Android接口定义语言(AIDL)
- Android接口定义语言(AIDL)
- Android AIDL接口定义语言
- aidl(android 接口定义语言)
- Android 接口定义语言 (AIDL)
- Android -- Android 接口定义语言 (AIDL)
- Android 接口定义语言(AIDL)
- Android的接口定义语言(aidl)
- 1、android散记-AIDL接口定义语言
- Android接口定义语言---AIDL(一)
- Android接口定义语言---AIDL(二)
- Android接口定义语言---AIDL(三)
- Android接口定义语言---AIDL(四)
- Android 接口定义语言AIDL使用解说
- AIDL(AndroidInterfaceDefinitionLanguage:接口定义语言)
- android绑定远程服务以及android接口定义语言(aidl)
- Android笔记三:Android 接口定义语言 (AIDL)--基本用法
- ios中的数据存储
- WIN电脑优化
- java输入
- C语言版GetPrivateProfileString()函数,从初始化文件中指定的条目取得字串
- java 泛型详解
- aidl(android 接口定义语言)
- C++声明和定义的区别 收藏
- Swift开发基础篇—基本语法
- LINUX下压缩某个文件夹(文件夹打包)
- Class文件结构
- 简单的网页验证码设计——学习笔记
- 什么是XPCOM
- PowerShell Function之获取OS信息
- 关于编码