理论修炼---初窥Android IPC机制


前言

  写这篇文章的意义是梳理对AndroidIPC机制的理解,主要是上层原理及使用


IPC的含义为进程间通信或者跨进程通信,也就是数据交换,进程和线程的区分从操作系统角度来说,线程是CPU的最小调度单元,同时也是一种有限资源,进程指的是一个执行单元在Android上指一个应用,进程可以包含很多个线程(包含与被包含的关系)通常一个应用也就进程都会包含至少一个线程,就是我们熟悉的UI线程(主线程)如果进程需要执行大量的耗时任务这个时候都在UI线程做就会造成界面无法响应(ANR),就需要我们用子线程去做这些耗时的任务。

1. Android中多进程的创建与常见问题

  Android中使用多进程的方法常规就是在AndroidManifest是指定Android:process属性,不能给一个线程或实体类指定运行时所在进程,或者去JNI层fork一个进程。
  指定Android:process属性需要注意的地方:

  • 进程名以:“:” 开头进程属于应用私有进程
  • 进程名以:“.” 开头的进程属于全局进程

1.1 使用多进程会造成的问题

  1. 静态成员和单例模式完全失效
  2. 线程同步机制完全失效
  3. SharedPreferences可靠性下降
  4. Application会多次创建
    静态成员和单例模式完全失效原因
    Android会为每个进程都分配一个独立的虚拟机,这就意味着不同的虚拟机在内存分配的地址空间不同,会导致在不同虚拟机访问同一个类对象会产生多个副本,如果我们要修改这个对象也只是修改当前进程中的副本对象,影响的只是当前进程,不会影响其他进程的副本对象。
    线程同步机制完全失效
    因为不同进程都有独立的内存空间,所以没有在同一块内存了,锁任何东西都无法保证线程同步,锁的也只是当前进程的副本对象而不是同一个对象。
    SharedPreferences可靠性下降
    SharedPreferences底层通过读写xml文件来实现,会存在一定的并发可能,SharedPreferences不支持两个进程同时进行读或写操作。
    Application会多次创建
  5. 系统创建进程同时会分配虚拟机,这个过程与启动应用是一致的,可以理解为系统又把应用重启了一遍
  6. 既然重新启动了那么创建新的Application就是正常的了
  7. 简单直白的来说,在同一个进程的组件是属于同一个虚拟机和Application,那么在不同进程中运行的组件就属于不同的虚拟机和Application

2. 基础概念

在跨进程通信中我们需要先了解以下三个内容:

  • Serializable
  • Parcelable
  • Binder
      为什么要了解Serializable,Parcelable,熟悉的都知道这两个都是为对象提供序列化的一种方式,两者一个是Java常用一个是Android推荐,为什么要重点圈出这个呢?是因为在IPC通信过程中对象的序列化与反序列化与这两个是密不可分的,我们可以选择其一就可,这里推荐还是用Parcelable。
      Serializable,Parcelable的区别在于Serializable的序列化与反序列化过程有大量的I/O操作,Parcelable是Android序列化方式就是用的麻烦一点,Parcelable主要用在内存序列化上但效率高。总结:想简单一点用Serializable,高效一点用Parcelable

2.1 Binder

关于binder的使用本来想写的但是搜了一下网上实在太多了就不造轮子式写了

关于Binder的文章网上到处是越看越晕,关于binder是什么可以从以下几个角度来看:

  1. Binder是Android的一个类,实现了Ibinder接口
  2. IPC角度来说Binder是Android中的一种跨进程通信方式
  3. Binder也可以理解为一种虚拟的物理设备,设备驱动在/dev/binder
  4. 从Android框架层来看Binder是serviceManager连接各种Manager(ActivityManager、WindowManager等)和相应ManagerService的桥梁
  5. 从应用层来看Binder是客户端和服务端通信的媒介

3. Android中可使用的IPC方式

  1. Bundle
  2. 文件共享
  3. Messenger
  4. AIDL
  5. 使用Content Provider
  6. Socekt

4 不同的IPC优缺点,及使用方式

在这里插入图片描述
这篇文章的代码示例链接:代码示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值