您的位置:首页 > 职场人生

Android面试篇之IPC机制[进程之间的通讯]

2017-12-15 14:23 375 查看

简介

IPC Inter-Process Communication 跨进程通讯,两个进程之间进行数据交换的过程

在Android中的多进程一般指一个应用中存在多个进程的情况,下面讨论一个应用中多进程的情况。

开启多进程的方式

在AndroidManifest.xml文件中,给四大组件指定android:process属性即可,值为进程的名称,如下

<service
android:name="com.katherine.du.everydaystudy.up20171214.aidl.server.BookManagerService"
android:process=":remote">
</service>

<provider
android:name=".up20171214.contentprovider.remoteprovider.BookProvider"
android:authorities="com.katherine.du.everydaystudy.provider"
android:process="com.katherine.du.everydaystudy.provider">
</provider>
假设我的包名为com.katherine.du.everydaystudy,上面的BookManagerService将会运行在名为“com.katherine.du.everydaystudy:remote”的进程中,

BookProvider将会运行在“com.katherine.du.everydaystudy.provider”的进程中。

至于区别,以“:”开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中;而不以“:”开头的进程属于全局进程,其他应用通过ShareUID方式可以喝它跑在同一个进程中。

跨进程通讯方式

1. 使用Bundle

    Bundle是实现了Parcelable接口的,所以可以方便地在不同的进程间携带数据。Activity、Service、Receiver都支持在Intent中传递Bundle数据。

2. 使用文件共享方式

    两个进程可以通过读写同一个文件进行传递数据,但对数据同步的处理有局限性,且无法做到即时通信。

3. 使用Messenger

    在不同的进程中传递Message对象,底层实现是AIDL,局限性:串行处理消息,只能通过Message的Bundle进行数据传递。

4. 使用AIDL

    通过AIDL实现跨进程的方法调用,高并发实时通信,同样适用于两个应用之间。

    ●  首先建立一个Service和一个AIDL接口

    ●  创建一个类继承自AIDL接口中的Stub类并实现Stub中的抽象方法,并在Service中的onBind方法中返回这个类的对象

    ●  最后客户端就可以绑定服务端的Service,建立连接后即可访问服务端的方法了

5. 使用ContentProvider

    系统预置了很多ContentProvider,如通讯录信息等,也可以自定义ContentProvider,只需要继承ContentProvider并实现其中的onCreate getType insert delete update query这六个方法。通常情况下,ContentProvider以表格的形式组织数据,但也支持文件数据,如图片、视频等。

6. 使用Socket套接字

    此方法同样适用于两个应用之间,或不同的设备之间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: