【Android开发艺术探索读书笔记】第二章 Android中的多进程模式

本文介绍了Android中的多进程模式,包括如何在AndroidManifest中配置多进程、不同进程命名的区别及多进程模式下的运行机制。此外,还讨论了多进程可能带来的问题,如静态成员和单例模式失效等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android中的多进程模式

开启多进程模式

  • 通常情况下,在Android中的多进程指的是一个应用存在多个进程,而不是指的是两个应用之间的多进程通信。
  • 在Android中使用多进程只有一种方法,就是给四大组件(Activity、Service、Receiver、ContentProvider)在AndroidManifest中指定android:process属性,也就是说无法给一个线程或者一个实体类指定其运行时所在线程。Ps:其实还有一种非常规方法,那就是通过JNI(Java Native Interface)在native层去fork一个新的进程。
<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity" 
                  android:process=":remote"/>
        <activity android:name=".ThirdActivity"
                  android:process="com.example.ricco.myapplication.remote" />
    </application>

进程名
上方代码和图片分别描述了如何在Android中创建多进程,其中MainActivity没有指定android:process属性,那么它运行在默认进程中,默认进程名为包名。而另外两个分别指定了“:remote”和“com.example.ricco.myapplication.remote”,首先,“:”的含义是==指要在当前进程名前面附加上当前的包名==,而对于ThirdActivity中的声明方式,它是一种完整的命名方式,不会附加包名信息;其次,进程名以“:”开头的进程属于当前应用的私有进程,其他应用组件不可以和它跑在同一个进程中,而其他进程属于全局进程,其他应用通过ShareUID方式可以和它跑在同一进程中。

  • Android会为每个应用分配一个唯一的UID,具有相同UID的应用才能共享数据。两个应用通过ShareUID跑在同一个进程中时,需要这两个应用有相同的ShareUID并且签名相同才可以。在这种情况下,不管它们是否跑在同一个进程中,它们可以互相访问对方的私有数据(data目录,组件信息等),如果它们跑在同一进程中,还可以共享内存数据,或者说它们看起来像是一个应用的两个部分。==其实可以这样理解同一个应用间的多进程:它就相当于两个不同的应用采用了ShareUID的模式==

多进程模式的运行机制

  • Android会为每一个应用分配了一个独立的虚拟机,或者说为每个进程都分配一个独立的虚拟机,不同虚拟机在内存分配上有不同的地址空间。
  • 一般来说使用多进程会造成如下几方面的问题:
    1. 静态成员和单例模式完全失效
    2. 线程同步机制完全失效
    3. SharePreference的可靠性下降(SharePreference底层是通过读/写XML文件来实现的,并发读写可能会出现问题)
    4. Application会多次创建(运行在同一个进程中的组件属于同一个虚拟机和同一个Application,所以运行在不同进程中组件是属于两个不同的虚拟机和Application的)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值