码迷,mamicode.com
首页 > 移动开发 > 详细

android IPC 机制 (开发艺术探索)

时间:2017-10-01 18:11:36      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:之间   交换   通信   UI   资源   name   font   serial   ack   

一、IPC 机制介绍

  IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。那么什么是进程,什么是线程,进程和线程是两个截然不同的概念。在操作系统中,线程是CPU调度的最小单元,同时线程是一种有限的系统资源。而进程指的一个执行单元,在PC和移动设备上指的是一个程序或者一个应用。一个进程可以包含多个线程,因此进程和线程是包含被包含的关系,最简单情况下,一个进程可以只有一个线程,即主线程,在Android里面也叫UI线程,在UI线程里才能操作界面元素。

1.1  Android中为什么要开启多进程

(1)分担主进程的内存压力。

  当应用越做越大,内存越来越多,将一些独立的组件放到不同的进程,它就不占用主进程的内存空间了。比如在启动一个不可见的轻量级私有进程,在后台收发消息,或者做一些耗时的事情,或者开机启动这个进程等。

(2)防止主进程被杀守护进程,守护进程和主进程之间相互监视,有一方被杀就重新启动它。

1.2 如何开启多进程

   四大组件在AndroidManifest文件中注册的时候,有个属性android:process这里可以指定组件的所处的进程。默认情况下的进程名就是包名。指定为别的进程之后,系统在启动这个组件的时候,就先创建(如果还没创建的话)这个进程,然后再创建该组件。

  获取进程id和进程名:

     String processName = "";
        ActivityManager manager = (ActivityManager) getApplicationContext()
                .getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningAppProcessInfo process: manager.getRunningAppProcesses()) {
            if(process.pid == Process.myPid())
            {
                processName = process.processName;
            }
        }
        Log.d(TAG, "Main:   "+ Process.myTid()+"    "+processName);

需要注意的是 运行在不同进程中的组件是属于不同的虚拟机和application。当某个应用有三个进程时则它的Application的oncreate会执行三次。

1.3 Android中开启多进程有哪些弊端

 (1)多占了系统的内存空间,很容易沾满而导致卡顿,同时也消耗用户的电量。同时在启动单独进程时,进程的创建会影响继承Application的实例,onCreate()会再次执行一遍。

 (2)不同进程之间内存不能共享,最大的弊端是他们之间通信麻烦,不能将公用数据放在Application中,堆栈信息、文件操作也是独立的,如果他们之间传递的数据不大并且是可序列化的,可以考虑通过Bundle传递, 如果数据量较大,则需要通过AIDL或者文件操作来实现。

  一般在安卓中使用多进程需要注意以下问题:

  • 静态成员和单例模式完全失效
  • 线程同步机制完全失效
  • SharedPreferences的可靠性下降
  • Application会多次创建

  为了解决这个问题,系统提供了很多跨进程通信方法,虽然说不能直接地共享内存,但是通过跨进程通信我们还是可以实现数据交互。实现跨进程通信的方式有很多,比如通过Intent来传递数据,共享文件SharedPreference,基于Binder的Messenger和AIDL以及Socket等。

二、IPC 基础概念

  主要介绍IPC中的基础概念,主要包括三个方面,Serializable 及 Parcelable 接口以及Binder。

  2.1 Serializable 及 Parcelable 接口 

    参考:http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html

  2.2 Binder

 

三、Android中的IPC方式

 

android IPC 机制 (开发艺术探索)

标签:之间   交换   通信   UI   资源   name   font   serial   ack   

原文地址:http://www.cnblogs.com/NeilZhang/p/7617334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!