美文网首页
Android中的IPC

Android中的IPC

作者: 钦_79f7 | 来源:发表于2019-12-17 12:58 被阅读0次

参考Android开发艺术探索

IPC简介

IPC:Inter-Process Communication,进程间通讯 或者 跨进程通讯。

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

Android中的IPC

  • Binder:Android中特有的进程通讯方式

    • ContentProvider
    • Intent (即通过 Bundle传输数据)
    • Messenger
  • Socket:可以实现任意两个终端之间的通信,在同一个设备的两个进程之间通讯 Socket自然也支持。

  • 使用文件共享

    此方式适合在对数据同步要求不高的进程之间进行通信,并且要妥善处理并发读/写的间隔。

    ==注意==:SharedPreference 并不在这种方式的范围内。SharedPreference是Android在提供的轻量级存储方案,它通过键值对的方式来存储数据,在底层实现上它采用 XML文件来存储键值对,每个应用的 ShredPreference文件都可以在当前包所在的 data目录下查看到。本质上来说,SharedPreference 也是文件的一种,但是由于系统对它的读/写有一定的缓存策略,即内存中会有一份SharedPreference 文件的魂村,因此在多进程模式下,系统对它的读/写就变得不可靠,当面对高并发的读/写访问,SharedPreference有很大几率会丢失数据,因此,不建议在进程间通信中使用SharedPreference。

开启多进程的方式

  • 常规中,在Android中开启多进程的方式只有一个,就是给四大组件在AndroidManifest中指定 android:process 属性。
  • 非常规的一种方式,就是通过JNI 在 Native 层去fork 一个新的进程。

这里主要针对 process 属性的开启多进程的模式展开描述。

packageName = "com.test"
android:process=":remote"
android:process="com.test.remote"

上面code 中显示两种process 属性赋值的方式

  • 一种是有:,这是一种简写,完整进程名会自动为其附加包名。

    这种方式开启的进程,属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中。

  • 另一种是完整的命名方式,此种属于全局进程,其他应用通过ShareUID的方式可以和它跑在同一个进程中

Android系统会为每个应用分配一个唯一的UID,具有相同UID的应用才能共享数据。这里要说明的是,两个应用通过ShareUID 跑在同一个进程中是有要求的,需要这两个应用有相同的ShareUID 并且签名相同才可以。在这种情况下,它们可以相互访问对方的私有数据,比如data目录、组件信息等,不管它们是否跑在同一个进程中。当然如果它们跑在同一个进程中,那么除了能共享data目录、组件信息,还可以共享内存数据,或者说它们看起来就像是一个应用的两个部分。

IPC中常用的类

  • CopyOnWriteArrayList
  • ConcurrentHashMap
  • AtomicBoolean
  • RemoteCallbackList

这些类都是为了保证多线程并发的情况下的线程安全的类,为方便开发者使用,由系统实现的原子类。其中RemoteCallbackList 是为了解决跨进程通信时的 监听回调的类。

相关文章

网友评论

      本文标题:Android中的IPC

      本文链接:https://www.haomeiwen.com/subject/olesnctx.html