Android Java基础
- ClassLoad双亲委派模式的原因
防止自定义类加载器优先加载了顶层公用的类,比如Object类,这样系统中就存在多个形同的类。 - Java内存区域
堆,函数栈(多个栈帧(返回地址,操作数栈,局部变量表,动态链接)),程序计数器,本地方法栈,方法区(常量,类,静态对象) - AIDL onTransact()运行在哪个进程?
当客户端与服务端都位于同一个进程时,方法调用不会走跨进程的transact过程,而当两者位于不同进程时,方法调用需要走transact过程,这个逻辑是由Stub的内部代理Proxy完成的. - Binder原理
优势:
高效一次拷贝,client server安全。
架构模型:
Client Server模型,两端都实现相同的接口,Client依据AIDL接口生成的代理类proxy接收服务端数据反序列化后返回结果,Server端接受到Binder实体指针和函数参数数据,根据指针找到Binder实体并且调用函数生成可传输的数据包返回给Client。流程上Server向ServiceManager注册服务,在ServiceManager中有查找表保存Binder实体引用和名字,Client根据名字获取Binder实体的引用。
底层原理:
一次拷贝就可以完成通信,mmap负责将分配的一块内存映射到内核区和接收方的缓存区,发生通信时,发送端执行一次copy-from-user,实现发送端到内核端的copy,接收端由于映射关系可以直接读取该缓存数据。
关键字:
client server,serviceManager,Proxy,stub,驱动,mmap,内核区进程内存区,Binder实体指针,ServiceManager查找表 - sleep和wait有什么区别
a. sleep是Thread的静态方法,wait是Object的方法
b.sleep不会释放锁,当前线程虽然会释放cpu但是继续持有锁,其他线程无法访问被对象锁锁住的方法,wait会释放锁,线程加入就绪队列。 - Synchronized锁升级
偏向锁,自旋锁,重量级锁。
相关文章
暂无评论...