Android架构师之路-进程和IPC架构(1)

1.IPC通讯html

2.android进程概念android

3.设置IPC通讯安全

4.IPC接口-定义和实现数据结构

5.IBinder接口的使用app

6.IPC通讯三步骤框架

7.短程通讯和远程通讯函数


1.先来看第一个大问题,什么是ipc通讯?oop

         IPC(Inter-Process Communication)通讯是跨越两个不一样进程(process)的通讯。线程

         通常而言,一个android应用程序里面的各组件(activity,service)都在一个进程里面执行,这种通讯叫作短程通讯,这就意味着两个activity在同一个进程里面执行。code

         相对来说的是远程通讯:两个组件(activity和service)分别在不一样的进程里面执行,二者想要通讯,必须经过IPC通讯,这就是所谓的远程通讯。

   IPC通讯效率:

         启动app,android系统里的Zygote服务孵化一个新的进程给app,而后将app加载到新诞生的进程中。

         基于Linux的安全限制,以及进程的基本特性,不一样的进程的地址空间是独立的,若是两个类在同一个进程执行,二者的沟通方便也快速

        不一样进程内执行时,须要借助IPC跨进程通讯了。

2.android的进程概念

     一个进程是一个独立的执行空间,不会被正在其它进程里的程序所侵犯。这种保护方法是Android的重要安全机制。因而,得先认识进程的内涵,才能进一步了解跨进程IPC机制。
      •在Android的进程里,有一个虚拟机(Virtual Machine,简称VM)的对象,可执行Java代码,也引导JNI本地程序的执行,实现Java与C/C++之间的沟通


每个进程在诞生时,都会诞生一个主线程(Main Thread),以及诞生一个Looper类的对象和一个MQ(Message Queue)数据结构。每当主线程做完事情,就会去执行Looper类。

主线程最主要的工做就是处理UI画面的事件(Event),每当UI事件发生时,Android框架会丢信息(Message)到MQ里。主线程看到MQ有新的信息时,就取出信息,而后依据信息内容而去执行特定的函数。执行完毕,就再继续执行Looper类,不断地观察MQ的动态。

刚才说明了,当两个类都在同一个进程里执行时,二者之间的沟通,只要采起通常的函数调用(Function Call)就好了,既快速又方便。一旦两个类分别在不一样的进程里执行时,二者之间的沟通,就不能采起通常的函数调用途径了,只好采起IPC沟通途径。


3.设置IPC通讯

在Android框架里,一个应用(程序)套件(Application Package)一般

</pre>含有多个Java类(Class),这些类能够在同一个进程(Process)里执行;也能够在不一样的进程里执行 。•一般,一个进程只会摆一支App。可是一支App可占用多个进程。<p></p><p></p><pre code_snippet_id="636160" snippet_file_name="blog_20150404_2_1842967" name="code" class="html"><activity android:name=".FirstActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name
="android.intent.category.LAUNCHER" />
</intent-filter> </activity>
<activity android:name=".LoadActivity">
</activity>
<service android:name=".LoadService" android:process=":remote" >
<intent-filter>
<action android:name
="com.misoo.pkm.REMOTE_SERVICE" />
</intent-filter></service>
</manifest>

  android:process=":remote",经过设置这个属性,将该service设置为单独一个进程中,与其余的activity或者service隔离开来,这样之,一个app中就会有两个进程了

其中,FirstActivity和LoadActivity两个类别会加载预设的进程里。而LoadService则会加载于名为“remote”的独立进程里。


这样,蓝色竖线两边分别是两个独立的进程,各自运行这本身的程序,为了数据的安全起见,每一个进程都须要独立建立一个vm对象,独享本身的数据,防止进程间数据共享,致使数据恶意篡改,不利于程序安全。

在Android的各进程里,都有一个VM对象,执行Java代码,也引导JNI本地程序的执行,实现Java与C/C++程序之间的沟通

相关文章
相关标签/搜索