android开发 多进程的基本了解

目录

    • 如何开启多进程?
    • 理解多进程模式的运行机制

如何开启多进程?

给四大组件在androidMenifest中指定android:precess

        <activity
            android:name=".ThreeActivity"
            android:exported="false"
            android:process="com.my.process.three.remote" />
        <activity
            android:name=".TwoActivity"
            android:exported="false"
            android:process=":remote" />
        <activity
            android:name=".OneActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

打开OneActivity、TwoActivity、ThreeActivity三个界面,查看进程id(在android studio中的device explorer),如下。
在这里插入图片描述
:remote与com.my.process.three.remote的区别。
:remote 在当前进程名前面附加当前的包名,简写的方式。com.my.process.three.remote 完整的命名方式。进程名以“:”开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中,而进程名不以“:”开头的进程属于全局进程,其他应用通过ShareUID方式可以和它跑在同一进程中。

两个应用通过ShareUID跑在同一个进程,需要有相同的ShareUID和签名才可以。

理解多进程模式的运行机制

增加一个类BOOK,并添加静态变量id。

public class Book {

    public static int id = 1;
}

在OneActivity中将id置位2,打印id,然后启动TwoActivity,再打印id。
在这里插入图片描述
一般情况下,静态变量是可以在所有的地方共享的,且一处修改处处都会同步。看上图,TwoActivity应该是2才对,但显示是1,这是多进程带来的问题。
android为每个进程都分配一个独立的虚拟机,不同的虚拟机在内存上有不同的地址空间,导致在不同的虚拟机中访问同一个类的对象会产生多份副本。结合本例,com.jn.testbrodercast与:remote进程都存在一个Book类,互不干扰,在一个进程中修改id只会影响当前进程。这就是为什么在OneActivity置位2,在TwoActivity不会受到影响的原音。

多进程会造成的问题:

  1. 静态成员和单例模式完全失效
  2. 线程同步机制完全失效
  3. sharedpreferences的可靠性下降
  4. Application会创建多次
    第1个问题上面说明了,第二问题就是多个独立虚拟机,都有各自的锁,不同进程锁的不是同一个对象。第3个问题SharedPreferences不支持两个进程同时去执行写操作。第4个问题,但一个组件跑在一个新的进程中的时候,系统要创建新的进程且分配独立虚拟机,这实则是启动了一个应用。

第4点的小实验,添加将下面代码,打开三个activity,查看日志信息。

public class MyApplication extends Application {


    @Override
    public void onCreate() {
        super.onCreate();


        Log.d("MyApplication", getProcessNameFromPid(Process.myPid()));
    }


    public String getProcessNameFromPid(int pid) {
        // 使用ActivityManager获取进程信息
        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        if (manager != null) {
            List<ActivityManager.RunningAppProcessInfo> processes = manager.getRunningAppProcesses();
            if (processes != null) {
                for (ActivityManager.RunningAppProcessInfo process : processes) {
                    if (process.pid == pid) {
                        // 返回进程名称
                        return process.processName;
                    }
                }
            }
        }
        // 如果未找到,返回null
        return null;
    }
}

在这里插入图片描述
MyApplication 运行了三次。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

冒泡排序c++

题目描述 编程输入n(1≤n≤20)个小于1000非负整数&#xff0c;然后自动按从大到小的顺序输出。&#xff08;冒泡排序&#xff09; 输入 第一行&#xff0c;数的个数n; 第二行&#xff0c;n个非负整数。 输出 由大到小的n个非负整数&#xff0c;每个数占一行。 样例输入 …

C++异步编程小论

目录 std::async与std::future 其他 std::package_task std::promise Reference 浅论&#xff1a;我看有人写的浅论异步编程的文章实际上在干的是介绍多线程&#xff0c;这里刚好最近对异步编程有所兴趣&#xff1a;我们来看看几个C11新加进来的一些异步编程关键字。 这里…

揭开ChatGPT面纱(3):使用OpenAI进行文本情感分析(embeddings接口)

文章目录 一、embeddings接口解析二、代码实现1.数据集dataset.csv2.代码3.运行结果 openai版本1.6.1 本系列博客源码仓库&#xff1a;gitlab&#xff0c;本博客对应文件夹03 在这一篇博客中我将使用OpenAI的embeddings接口判断21条服装评价是否是好评。 首先来看实现思路&am…

视频教程下载:用ChatGPT的 API 开发AI应用指南

通过这门关于 OpenAI API 和 ChatGPT API 的全面课程&#xff0c;在您的应用中释放人工智能的力量。随着人工智能技术的快速发展&#xff0c;比以往任何时候都更重要的是保持领先地位&#xff0c;并为您的项目利用这些尖端工具。在本课程中&#xff0c;您将深入了解人工智能驱动…

每日论文推荐:Prismatic VLMs VLM设计经验总结

&#x1f4cc; 元数据概览&#xff1a; 标题&#xff1a;“Prismatic VLMs: Investigating the Design Space of Visually-Conditioned Language Models”作者&#xff1a;Siddharth Karamcheti, Suraj Nair, Ashwin Balakrishna, Percy Liang, Thomas Kollar, Dorsa Sadigh&a…

LLM学习笔记-2

在未标记数据上进行预训练 本章概要 在上节的笔记中&#xff0c;因为训练出的效果&#xff0c;并不是特别理想&#xff0c;在本节中&#xff0c;会用数据进行训练&#xff0c;使得模型更加的好&#xff1b; 计算文本生成损失 inputs torch.tensor([[16833, 3626, 6100],…

SpringBoot 操作 Redis

导入对应版本的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>修改配置文件中的信息 spring:redis:host: 127.0.0.1port: 8888注意: 我这里 xsh…

springboot注解开发如何映射对象型数据

创作灵感 最近在帮学校写一款小程序时&#xff0c;有这样一个数据需要展示&#xff1a;一条申请记录&#xff0c;里面包含了申请时间、申请状态、申请所提供的六条活动记录等待&#xff0c;其中&#xff0c;申请所提供的六条活动记录为一个数组&#xff0c;数组中的每个元素又…

面板数据门槛归回分析,xthreg的安装,xthreg2安装包

我用的是Stata17,数据是不平衡的面板数据,需要用到xthreg2,虽然我找到了xthreg2.ado,但是还需要安装xthreg,因为运行xthreg2需要xthreg包顺带安装的lxthreg.mlib文件。但是!我后来发现还是不行,最后是去买了一个真正能用到xthreg2的lxthreg.mlib文件,才可以运行。 一、…

[图解]软件开发中的糊涂用语-04-为什么要追究糊涂用语

0 00:00:00,030 --> 00:00:05,620 今天呢&#xff0c;我们来说一个为什么要追究糊涂用语的问题 1 00:00:06,310 --> 00:00:06,548 2 00:00:06,548 --> 00:00:11,077 大家知道我们前些天都发了好几个视频 3 00:00:11,077 --> 00:00:13,461 追究这个糊涂用语 4 00…

2024免费专为Mac用户设计的清理和优化工具CleanMyMac X

CleanMyMac X是一款专为Mac用户设计的清理和优化工具。以下是对CleanMyMac X的详细介绍&#xff1a; 一、主要功能 系统清理&#xff1a;CleanMyMac X能够智能扫描Mac的磁盘空间&#xff0c;识别并清理各种垃圾文件&#xff0c;这些垃圾文件包括重复文件、无用的语言安装包、i…

五.音视频编辑-音频混合-应用

引言 音频混合技术是一项强大的工具&#xff0c;可以为应用程序增添丰富的功能和用户体验。在前一篇博客中&#xff0c;我们深入探讨了AVFoundation框架中的音频混合基础知识和实现方法。现在&#xff0c;让我们进一步探索&#xff0c;看看如何将这些技术应用到实际项目中。 …

Django项目无法安装python-ldap依赖解决方案

最近工作中安排了一个Python web项目&#xff0c;使用Pycharm从git拉取代码后&#xff0c;配置号Python的解释器和pip后&#xff0c;Pycharm自动下载安装项目所需的依赖&#xff0c;但是有一个依赖django-auth-ldap4.1.0安装始终失败&#xff0c;最初的异常信息提示是&#xff…

Java客户端如何直接调用es的API

Java客户端如何直接调用es的API 一. 问题二. withJson 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一. 问题 今天做项目的时候&#xff0c;想要直接通过java客户端调用es的api…

解决Django中调页面时出现“Did you forget to register or load this tag”报错

解决Django中调页面时出现“Did you forget to register or load this tag?”报错 1.问题收录 2.分析问题 在HTML文件中&#xff0c;{{title}}&#xff0c;{{lanyy}}&#xff0c;django 默认规定的语法&#xff0c;用{{}}包起来的变量叫做模板变量。 django渲染模板时会将大…

2.1K Star微软开源的高质量 iot库

功能描述 该项目是一个开源的 .NET Core 实现&#xff0c;旨在帮助开发者构建适用于物联网(IoT)设备和场景的应用程序。它提供了与传感器、显示器和输入设备等相互作用所需的 GPIO 引脚、串口等硬件的接口。该仓库包含 System.Device.Gpio 库以及针对各种板卡&#xff08;如 Ra…

论文笔记:Time-LLM: Time Series Forecasting by Reprogramming Large Language Models

iclr 2024 reviewer 评分 3888 1 方法 提出了 Time-LLM&#xff0c; 是一个通用的大模型重编程&#xff08;LLM Reprogramming&#xff09;框架将 LLM 轻松用于一般时间序列预测&#xff0c;而无需对大语言模型本身做任何训练 为什么需要时序数据和文本数据对齐&#xff1a;时…

vi, vim,data,wc,系统常用命令-读书笔记(十)

vi 文本编辑器 基本上 vi 共分为三种模式&#xff0c;分别是“一般指令模式”、“编辑模式”与“命令行命令模式”。这三种模式的作用分别是&#xff1a; 一般指令模式&#xff08;command mode&#xff09;以 vi 打开一个文件就直接进入一般指令模式了&#xff08;这是默认的…

分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测

分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测 目录 分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Mat…

frp改造Windows笔记本实现家庭版免费内网穿透

文章目录 前言frp原理Windows服务端IP检验IP固定软件下载端口放行端口映射开机启动 NAS客户端端口查询软件下载端口检验穿透测试自启设置 Ubuntu客户端软件下载后台启动 后记 前言 之前一直用花生壳远程控制一个服务器&#xff0c;但最近内网的网络策略似乎发生了变化&#xf…