Android开发艺术探索笔记 第二章

Android开发艺术探索 第二章 IPC

  • Windows上可以通过剪切板、管道、邮槽等来进行进程间通信
  • Linux可以通过命名管道、共享内容、信号量等来进行进程间通信
  • android中使用多进程只有一种方法:给四大组件指定android:process 属性
  • 进程名以:开头的为私有进程,否则为全局进程
  • 系统会为每个应用分配唯一的UID,具有相同的UID才能共享数据
  • 系统为每个进程分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间
  • 多进程的问题:静态成员和单例失效;线程同步失效;sf可靠性下降;application创建多次
  • sf底层是通过读写xml实现的,所以并发读写会出问题。读写有缓存策略,多进程下不可靠
  • ipc不能共享内存但实现了数据交互
  • Serializable: 实现接口 声明静态long常量UID(辅助序列化与反序列化过程)
  • 静态成员变量和transient标记的成员变量不参与序列化
  • 实现Parcelable接口可以被Intent、Binder传递,嵌套Parcelable对象的发序列化过程需要传递当前线程的上下文类加载器
  • 网络传输和存储到设备有S其余用P
  • Binder可以理解为虚拟的物理设备,连接Manager和ManagerService的桥梁,客户端服务端的通信媒介
  • Android中Binder主要用于Service包括AIDL和Messenger
  • 普通service中的Binder不涉及进程间通信
  • 在Binder中传输的接口都需要继承IInterface
  • asInterface将Binder对象转化为AIDL接口对象,不同进程返回代理,相同进程返回本身
  • onTransact 分发Binder,利用返回false会导致客户端请求失败来做权限验证
  • 客户端发起请求后,当前线程会被挂起知道服务端返回数据
  • 手敲Binder 继承IInterface实现asBinder方法;实现Stub和Stub中的Proxy代理类
  • Message是串行的方式处理客户端 发来的请求,不适合并发。主要用来传递消息
  • AIDL支持的数据类型:基本数据类型、String、CharSequence、ArrayList、HashMap、Parcelable、AIDL接口
  • AIDL参数除了基本数据类型都要标记方向,in out inout 开销不同
  • AIDL接口不支持静态常量,只支持方法
  • 对象跨进程传输本质上都是反序列化的过程
  • RemoteCallbackList是系统专门提供的用于删除跨进程listener,因为每次传递都是一个新的对象,但是他们底层的Binder对象是同一个
  • 服务端方法本身就可以执行大量耗时操作,切记不要再服务端开线程执行异步任务
  • 实现自定义的ContenProvider需要继承ContentProvider实现6个抽象类CRUD onCreate getType 返回一个MIME
  • ContentProvider对底层的数据存储方式没有任何要求可以是SQLite也可以是普通文件或者对象
  • android:authorities是ContentProvider的唯一标识
  • SQLiteHelper创建数据库
  • 同一个SQLiteDatebase对象内部对数据库操作是有同步处理的
  • BinderPool避免大量Service创建。通过queryBinder去获取各自对应的Binder
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值