android:process="remote",Android——多进程

之前我们了解了 :

-----------------------------------Java——多线程浅析.

-----------------------------------Android——Handler详解

-----------------------------------Android——HandlerThread浅析

-----------------------------------Java——ThreadPool线程池

让我们继续看看Android多进程:

1. 概述

默认情况下,同一应用的所有组件均在相同的进程中运行,且大多数应用都不应改变这一点。但是,如果您发现需要控制某个组件所属的进程,则可在清单文件(AndroidMenifest)中执行此操作。

主要依靠android:process属性:

各类组件元素activity、service、receiver和 provider的清单文件条目均支持 android:process 属性,此属性可指定该组件应在哪个进程中运行。

可以设置android:process属性,使每个组件均在各自的进程中运行,或者使某些组件共享一个进程,而其他组件则不共享

也可设置 android:process,以便不同应用的组件在同一进程中运行,但前提是这些应用共享相同的 Linux 用户 ID 并使用相同的证书进行签署。

此外,application 元素还支持 android:process 属性,用来设置适用于所有组件的默认值。

application类继承自 ContextWarpper 类,代表应用程序(即 Android App)的类,也属于Android中的一个系统组件

每个Android App运行时,会首先自动创建Application 类并实例化 Application 对象,且只有一个。即 Application类 是单例模式(singleton)类

也可通过 继承 Application 类自定义Application 类和实例

即不同的组件(如Activity、Service)都可获得Application对象且都是同一个对象

Application 对象的生命周期是整个程序中最长的,即等于Android App的生命周期

当内存不足,而其他更急于为用户提供服务的进程又需要内存时,Android 可能会决定在某一时刻关闭某个进程。正因如此,系统会销毁在被终止进程中运行的应用组件。当这些组件需再次运行时,系统将为其重启进程。

2. 开启多进程模式

正常情况下,在android中多进程是指一个应用中存在多个进程的情况。在Android中使用多进程只有一种方法,就是在AndroidMenifest中指定android:process属性。如下所示:

android:process=":remote"/>

android:process="com.zchhh.LaunchMode:remote"/>

其中FirstActivity和SecondActivity分别指定了process属性,并且它们的属性值不同,这意味着当前又增加了两个新进程。

假设当前包名为com.zchhh.LaunchMode,当FirstActivity启动时,系统会为它单独创建一个进程,进程名为"com.zchhh.LaunchMode:remote";

当SecondActivity启动时,系统也会为它单独创建一个进程,进程名com.zchhh.LaunchMode.remote。

我们注意到FirstActivity和SecondActivity的android:process属性分别为:remote和com.zchhh.LaunchMode.remote,它们有什么区别呢?

首先:

:指要在当前进程名前面加上包名,这是一种简写方法

对于FirstActivity来说它完整的进程名为com.zchhh.LaunchMode:remote

对于SecondActivity中的声明方式,是一种完整的声明方式,不会附加包名

其次: 私有进程和全局进程

进程名以“:”开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程当中

不以“:”开头的进程属于全局进程,其他应用通过shareUID方式可以和它跑在同一个进程中

Android会为每个应用分配唯一的一个UID,具有相同UID的应用才能共享数据。

【注】:

(1)私有进程:android:process=":remote",以冒号开头,冒号后面的字符串原则上是可以随意指定的。如果我们的包名为“com.biyou.multiprocess”,则实际的进程名 为“com.biyou.multiprocess:remote”。这种设置形式表示该进程为当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中。

(2)全局进程:进程名称不以“:”开头的进程都可以叫全局进程,如android:process=“com.secondProcess”,以小写字母开头,表示运行在一个以这个

你可能感兴趣的:(android:process="remote",Android——多进程)