Android的IPC

来源:互联网 发布:握奇数据借壳上市 编辑:程序博客网 时间:2024/05/17 06:09

一、什么是Android的IPC? IPC的使用场合?

1、IPC是Inter-Process Communication的缩写,含义是进程间通信或跨进程通信,指的是两个进程间进行数据交换的过程。

2、只有面对多进程的场景下,才需要考虑进程间通信(IPC)

(1)多进程情况分两种:

a、一个应用因为某些原因需要采取多进程模式来实现。

比如:有些模块由于某些特殊原因需要运行在单独的进程中,又或者为了加大一个应用可使用的内存所以需要通过多进程来获取多份内存空间。

b、当前应用需要向其他应用获取数据,由于是两个应用,所以必须采用跨进程的方式来获取所需的数据

(2)使用多进程带来的问题

a、静态成员和单例模式完全失效:不是同一块内存

b、线程同步机制完全失效:不是同一块内存

c、SharedPreferences的可靠性下降:不支持两个进程同时去执行写操作

d、Application会多次创建

3、IPC基础概念介绍,主要包含三方面内容:Serializable接口、Parcelable接口以及Binder

(1)Serializable:是Java提供的一个序列化接口,为对象提供标准的序列化和反序列化操作。

想让对象实现序列化,只需实现Serializable接口并声明一个serialVersionUID即可,该serialVersionUID对序列化不是必需的,但对反序列化过程会产生影响。

(2)Parcelable:是Android中的序列化方式

(3)Binder:是Android的一个类,它实现了IBinder接口,主要用在Service中,包括AIDL和Messager,Messager的底层其实是AIDL。

从IPC角度讲,Binder是Andorid中的一种跨进程通讯方式

从Android Frameword角度讲,Binder是ServiceManager连接各种Manager(ActivityManager、WindowManager等等)和相应的ManagerService的桥梁

从Android应用层面讲,Binder是客户端和服务端进行通信的媒介,当bindService的时候,服务端会返回一个包含服务端业务调用的Binder对象,通过这个Binder对象,客户端就可以获取服务端提供的服务或数据,这里的服务指普通服务和基于AIDL服务

备注:

《1》Serializable和Parcelable接口的使用场合?

Serializable和Parcelable接口可以完成对象的序列化过程,当需要通过Intent和Binder传输数据时就需要使用Serializable或Parcelable接口

《2》Serializable和Parcelable接口二者如何选取?

Serializable是java中的序列化接口,使用简单但开销大,序列化和反序列化过程需要大量I/O操作;

Parcelable是Android中的序列化接口,使用麻烦但效率高,主要用在内存序列化上,将对象序列化到存储设备中或将对象序列化后通过网络传输;在这两者情况下建议使用Serializable

二、什么是线程?什么是进程?

按照操作系统中的描述,线程是CPU调度的最小单位,且是一种有限的系统资源;

进程指一个执行单元,在PC和移动设备上指一个程序或者一个应用

注:一个进程包含多个线程,因此进程和线程是包含和被包含的关系

三、什么是ANR?造成ANR的原因?如何解决?

1、ANR(Application Not Responding)即应用无响应

2、一个进程需要执行大量耗时的任务,如果把这些任务放在主线程(UI线程)去执行就会造成界面无法响应,严重影响客户体验

3、解决这个问题就需要用到线程,把耗时的任务放到线程中即可

0 0