Android IPC机制(一)多进程模式

1. 什么是进程?

      进程是操作系统分配资源(如 CPU、内存等)的基本单位。简单来说,进程是一个正在执行的程序的实例。每个进程都有自己的内存空间、数据栈和其他辅助数据,用于跟踪进程的执行状态。在 Android 中,每个应用程序通常运行在自己的进程中,这种隔离性确保了一个应用的崩溃不会直接影响到其他应用。

2. 开启多进程的方式

       在 Android 中,开启多进程的方式主要通过在 AndroidManifest.xml 文件中为四大组件(Activity、Service、BroadcastReceiver、ContentProvider)指定 android:process 属性来实现。这个属性允许开发者指定组件在哪个进程中运行,从而实现多进程的功能。

以下是一个简单的示例,展示了如何在Android中 创建多进程:

      <activityandroid:name=".MainActivity"android:exported="true" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name=".ThirdActivity"android:exported="false"android:process="com.ex.binder1.remote" /><activityandroid:name=".SecondActivity"android:exported="false"android:process=":remote" />

在上面的代码中,我们为 SecondActivity 和 ThirdActivity 使用了process属性分别指定了不同的进程。具体来说:

  • SecondActivity 的进程名为 xxx.xxx.xxx:remote,其中 xxx.xxx.xxx 是应用的包名。
  • ThirdActivity 的进程名为 com.ex.binder1.remote,这是另一种完整的说明方式,不会附加包名。

同时MainActivity没有为他指定process属性,那么它运行在默认进程中,默认进程的进程名是包名。

进程命名规则

  • 进程名以“:”开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程当中。
  • 不以“:”开头的进程属于全局进程,其他应用通过shareUID方式可以和它跑在同一个进程中。

3.查看多进程的方式

1.通过Android Studio的Log控制台查看

2.adb命令查看

 adb shell ps | findstr com.ex.binder1(自己的包名)

4.多进程的进程隔离问题

在进程A定义一个变量,然后进行重新赋值,然后我们在进程B拿到这个变量打印出来看一下效果,会发现进程B的变量是没有被修改过的,这就很有意思了,这就是我们说的进程隔离。

产生进程隔离的原因?

我们知道Android为每一个应用分配了一个独立的虚拟机,或者说为每一个进程都分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这就导致在不同的虚拟机中访问同一个类的对象会产生多份副本。所以修改进程A的变量不会影响到进程B的变量。

一般来说,进程隔离会造成如下几方面的问题:

(1)静态成员和单例模式完全失效。原因:不同进程访问的不是同一个对象了。

(2)线程同步机制完全失效。原因:不同进程锁的不是同一个对象了。

(3)SharePreferences的可靠性下降。原因:SharePreferences底层是通过读/写XML文件来实现的,并发 写或者读/写 显然是可能出现问题的。

(4)Application会多次创建。原因:运行在不同(进程)中的组件是属于不同的(虚拟机和Application以及内存空间)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6462.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【笔记】铜导线在高频下的损耗

参考资料&#xff1a;Litz Wire: Practical Design Considerations for Todays High Frequency Applications&#xff0c;kyle jensen,2020 1.高频条件下因为集肤效应&#xff0c;需要选择多股线 否则高频下因为集肤效应和接近效应&#xff0c;所引发的交流阻抗上升&#xff…

火语言RPA流程组件介绍--指纹浏览器管理

&#x1f6a9;【组件功能】&#xff1a;指纹浏览器配置管理创建、删除、判断是否存在 配置预览 配置说明 操作类型 有“创建、删除、判断是否存在”3种类型供选择。 指纹浏览器配置名称 支持T或# 默认FLOW输入项 填写指纹环境分身名称。 操作方式 有“名称、Id”2种方式…

windows自启动 映像劫持 屏保

Windows权限维持—自启动&映像劫持&粘滞键&辅助屏保后门 自启动 自启动路径加载 受控windows机器选择当前用户C盘目录下将文件放到这里每到电脑服务器重启就会自动加这次路径下文件 C:\Users\月\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startu…

SSH实验3拒绝root用户远程登录

打开配置文件&#xff1a; 默认为root用户密码登录&#xff1a; 加一行PermitRootLogin no&#xff0c;拒绝登录&#xff1a; 再打开这个配置文件&#xff1a; yes改为no&#xff1a; 查看SELinux 当前处于宽松模式&#xff0c;并且关闭防火墙&#xff1a; 重启sshd&#xff1a…

mysql 主从复制

一、通过二进制文件binlog进行主从同步 开启防火墙3306端口 1.设置主服务器&#xff1a;/etc/my.cnf log-binbinlog #二进制文件名称&#xff0c;需要开启 binlog-formatROW; # row,statement,mixed mysql默认采用statement statement&#xff1a;主要记录了sql。日志…

Python作业记录

复制过来的代码的换行有问题&#xff0c;但是也不是什么大问题。 后续我会进行补充和修改。 请将如下英文短句根据单词切分成列表&#xff1a; The continent of Antarctica is rising. It is due to a geological phenomenon called post-glacial uplift 并在切分好的列表…

Spring Boot框架下的水电管理系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理大学城水电管理系统的相关信息成为必然。开…

vue3+less使用主题定制(多主题定制)可切换主题

假如要使用两套主题&#xff1a;蓝色、红色 例如&#xff1a; 首先确保自己的vue3项目有less&#xff0c;这边不多做接入解释 1、在src目录下建一个styles文件夹&#xff0c;在syles文件夹下面新建两个less文件&#xff1a;theme.less和variables.less&#xff1b; theme.le…

PyQt5实战——翻译器的UI页面设计以及代码实现(七)

个人博客&#xff1a;苏三有春的博客 系类往期文章&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; PyQt5实战——多脚本集合包&#xff0c;UI以及工程布局&#xff08;二&#xff09; PyQt5实战——多脚本集合包&#xff0c;程序…

【种完麦子,我就往南走,去西双版纳,过个冬天!】

麦子奶奶&#xff1a;冰哥&#xff0c;你好。 大冰&#xff1a;你好&#xff0c;咱俩不定谁大呢。 麦子奶奶&#xff1a;嗯&#xff0c;我大&#xff0c;我60多了&#xff0c;你各方面都是哥。 大冰&#xff1a;阿姨好 麦子奶奶&#xff1a;我想出去看看祖国的大好河山&…

koa + sequelize做距离计算(MySql篇)

1.核心思路 1.利用sequelize的fn方法调用MySql原生函数&#xff08;st_distance_sphere、point&#xff09; 2.这里利用到了MySql的原生函数&#xff0c;不懂可以去看看mysql的函数知识 2.核心代码 //st_distance_sphere、point函数用来计算当前经纬度和目的地经纬度 //col…

编译工具与文件学习(一)-YAML、repos、vcstoolcolcon

YAML YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种人类可读的数据序列化格式&#xff0c;常用于配置文件、数据交换和存储结构化数据。YAML 的设计目标是简洁、易读&#xff0c;并且能够表示复杂的数据结构。 YAML 文件的基本语法 基本结构&#xff1a; Y…

【数据结构】Java 集合 Set 接口及其实现类的定义简介

接口继承接口&#xff0c;类实现接口。 Set 是一个接口&#xff0c;实现了 Collection 接口&#xff08;都带有泛型&#xff09;。它可以被继承或实现。在Java 集合章节的知识点中&#xff0c;学习其子类对象的实现以及关系。 类关系图 可以在IDEA中直接生成 集合 Set 类关系…

【青牛科技】应用方案 | D75xx-150mA三端稳压器

概 述 D75XX系列是一套三端高电流低压稳压器。它们可以提供 150mA 的输出电流和允许输入电压高达30V。它们有几个固定的输出电压范围为3.0 V至5.0 V。CMOS 技术确保低电压降和低静态电流。 虽然这些设备主要设计为固定电压调节器&#xff0c;但它们可以与外部元件一起使用&…

(三)使用Vite创建Vue项目,了解Vue3生命周期

&#xff08;三&#xff09;使用Vite创建Vue项目 序章Vite官网安装方式一安装方式二 Vue3生命周期生命周期的详细解释 序章 其实这个没什么难点&#xff0c;步骤也非常简单&#xff0c;首先我们在本地的目录上创建一个x项目文件夹,然后在控制台上敲一些命令即可。 Vite官网 Vi…

批量清除Word Excel PPT文件打开密码

工作中经常要处理很多带密码的Excel文件&#xff0c;如果一个一个手动删除密码&#xff0c;那工作量就很大了。 网上找了很多方法&#xff0c;都没有找到一个好用的能批量删除密码的软件。 下载地址&#xff1a;https://pan.quark.cn/s/e3bffeec5458 于是就写了一个批量删除E…

【Effective C++】阅读笔记3

1. 成员变量声明为Private 建议将成员变量声明为Private&#xff0c;然后再public中提供调用该数据的接口 设置成Private的原因分析 类内成员变量被声明为Private&#xff0c;那么就可以外部代码直接访问或者修改内部数据通过公共接口获取内部数据&#xff0c;这样可以减少对外…

QCustomPlot添加自定义的图例,实现隐藏、删除功能(二)

文章目录 QCustomPlot初识和基本效果图实现步骤:详细代码示例:实现原理和解释:使用方法:其他参考要实现一个支持复选框来控制曲线显示和隐藏的自定义 QCPLegend 类,可以通过继承 QCPLegend 并重写绘制和事件处理方法来实现,同时发出信号通知曲线的状态变更。 QCustomPl…

基于Java公益志愿捐赠管理系统设计与实现(源码+LW+调试+开题报告)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【反射率】-- Lab 转换(excel)

系列文章目录 文章目录 系列文章目录前言一、CIE1.CIE 简介2.cie 1931标准色度匹配函数数据3.从CIE1931RGB到CIE1931 XYZ 二、Lab颜色空间的理解1.Lab色差公式怎么计算色差 三、D65光源Lab计算总结 前言 一、CIE 1.CIE 简介 CIE是由国际照明工程领域中光源制造、照明设计和光…