Android进阶之 第2章 IPC机制

作者: sinyu 分类: Android,总结与反思 发布时间: 2018-04-03 20:11

知识点:

  • IPC基础及概念

    • 多进程模式
    • 序列化

      • Serializable接口
      • Parcelable接口
    • Binder机制
  • IPC方式

    • Bundle
    • 文件共享
    • AIDL
    • Messager
    • ContentProvider
    • Socket
  • Binder连接池

一、IPC基础及概念

1.多进程模式

a.进程&线程

  • 进程:一般指一个执行单元,在PC和移动设备上指一个程序应用
  • 线程:CPU调度的最小单元。线程是一种有限的系统资源。

两者关系: 一个进程可包含多个线程,即一个应用程序上可以同时执行多个任务。

  • 主线程(UI线程):UI操作
  • 有限个子线程:耗时操作

注意:不可在主线程做大量耗时操作,会导致ANR(应用无响应)。

b.开启多进程模式的方式

  • (不常用)通过JNI在native层fork一个新的进程。
  • (常用)在AndroidMenifest中给四大组件指定属性android:process,进程名的命名规则:

    • 默认进程:没有指定该属性则运行在默认进程,其进程名就是包名
    • 以“:”开头的进程:

      • 省略包名,如android:process=”:remote”,表示进程名为com.example.myapplication:remote。
      • 属于当前应用的私有进程,其他进程的组件不能和他跑在同一进程中。
    • 完整命名的进程:

      • 如android:process=”com.example.myapplication.remote”。
      • 属于全局进程,其他应用可以通过ShareUID方式和他跑在用一个进程中。

UID&ShareUID:

  • Android系统为每个应用分配一个唯一UID,具有相同UID的应用才能共享数据。
  • 两个应用通过ShareUID跑在同一进程的条件:ShareUID相同且签名也相同。

    • 满足上述条件的两个应用,无论是否跑在同一进程,它们可共享data目录,组件信息。
    • 若跑在同一进程,它们除了可共享data目录、组件信息,还可共享内存数据。它们就像是一个应用的两个部分。

c.查看进程信息的方法

  • 通过DDMS视图查看进程信息。
  • 通过shell查看,命令为:adb shell ps|grep 包名。

d.需要进程间通信的必要性:所有运行在不同进程的四大组件,只要它们之间需要通过内存在共享数据,都会共享失败。

原因:由于Android为每个应用分配了独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这会导致在不同的虚拟机中访问同一个类的对象会产生多份副本。

e.多进程造成的影响,总结为以下四方面:

①静态变量和单例模式失效。

  • 由独立的虚拟机造成。

②线程同步机制失效。

  • 原因同上。

③SharedPreference的不可靠下降。

  • SharedPreferences不支持两个进程同时进行读写操作,即不支持并发读写,有一定几率导致数据丢失。

④Application多次创建。

  • Android系统会为新的进程分配独立虚拟机,相当于系统又把这个应用重新启动了一次。


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注