AIDL的学习
来源:互联网 发布:数据关联 编辑:程序博客网 时间:2024/05/16 00:26
首先先说说,远程服务和本地服务。
本地服务,在当前工程里的服务,运行在当前进程里的。
远程服务是在另外一个工程的服务,运行在另外进程里的。
代码写起来有什么区别呢
首先先说说IPC
inter process communication 进程间通讯
如何理解:操作系统把进程创建出来,实际划分一份独立内存空间,那么每个进程都用独立的内存空间,有些特殊的应用场景,需要进程通讯,那如何通讯呢
操作系统进程间通讯:开辟一块公共的内存空间 信号量(如boolean)、 消息队列(队列)、 消息邮箱(比较复杂数据) 、管道(进程1的产物都放到这里,进程2读取出来)
进程间通讯的原理就是两进程访问一块公共内存空间。
Linux设备外设比如说内存、硬盘都是以文件来表示的
binder其实就是一块内存,为获取这块内存,就开发了一个驱动程序
现在就知道进程间通讯就是一个进程通过binder驱动把数据写到这块内存里,另外一个进程把数据读取出来。
具体代码实现,需要aidl,android interface definition language:
1、创建服务接口Iservice
2、修改Iservice,.java修改为.aidl文件 去掉public 因为通用,目的是不同应用程序可以访问,没有修饰符 自动生成服务接口在gen中
3、继承Iservie.Stub ,MyBinder extends Iservice.Stub
4、强制类型转换Iservice.Stub.asinterface(bindr) ,调用程序拷贝aidl并包一致,bindServie 传实现serviceconnection 在实现方法serviceconnected中把Ibinder包装为Iservice.Stub.asinterface();
adil:
package com.tan.remote;
interface IService {
void callMethodInService();
}
public class RemoteService implements Service{
private class MyBinder extents IService.Stub{
publc void callMethodINService(){
system.out.println("call");
}
}
onBinder(){
return new MyBinder();
}
}
调用程序:
bindSevice(intent,new MyServiceConnection(),BINDER_AUTO_CREATE);
ISevice iService;
MyServiceConnection implements ServiceConnection{
serviceConnect(Binder service){
iService = ISevice.Stub.asInterface(service);
}
}
onClicke(){
iService.callMethodINService();
}
- AIDL的学习
- AIDL的学习
- AIDL的学习记录
- Android学习 - Aidl的使用
- Android 学习 AIDL 的使用
- Aidl的一个简单学习
- 学习AIDL遇到的问题
- aidl 学习
- Aidl学习
- aidl学习
- AIDL学习
- 学习AIDL
- AIDL学习
- 关于android AIDL的学习总结
- Android Service AIDL的学习,传递对象
- 跨进程通信AIDL的学习
- Android Framework学习笔记 -- aidl的使用
- 笔记001:Aidl 学习
- 黑马程序员--java基础--函数和数组
- hdu 1213 How Many Tables(并查集)
- jbpm简介
- 分布式系统的事务处理
- 小明的故事(一) -- Json导致的事故总结
- AIDL的学习
- Java Collection
- 两个高斯函数的卷积仍为一高斯函数
- 谈消息总线的路由模型
- HDU2023 求平均成绩
- sizeof
- 延长APP的启动时间
- SpringMVC 启用注解报错
- 【蓝桥杯】PREV-32 分糖果