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

1.IPC通信

2.android进程概念

3.设置IPC通信

4.IPC接口-定义和实现

5.IBinder接口的使用

6.IPC通信三步骤

7.短程通信和远程通信


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

         IPC(Inter-Process Communication)通信是跨越两个不同进程(process)的通信。

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

         相对来讲的是远程通信:两个组件(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++程序之间的沟通



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值