【Android】Intent
目录
一、什么是Intent
二、显式Intent
三、隐式Intent
四、复杂数据传递
五、跨应用权限管理
六、常见问题
一、什么是Intent
1. 跨组件通信桥梁
- 实现组件间通信(Activity/Service/BroadcastReceiver)
- 封装操作指令与数据传输逻辑
目标组件 | 启动方法 | 数据返回方式 |
---|---|---|
Activity | startActivity() | onActivityResult() |
Service | startService() /bindService() | Binder /Messenger |
BroadcastReceiver | sendBroadcast() | 无(单向通信) |
【Android】四大组件之Activity-CSDN博客文章浏览阅读1.2k次,点赞20次,收藏24次。Activity 是 Android 应用的核心交互组件。_android之activityhttps://blog.csdn.net/qq_15711195/article/details/147526174【Android】四大组件之Service-CSDN博客文章浏览阅读1k次,点赞15次,收藏11次。Service是Android应用的核心后台组件。_android之service
https://blog.csdn.net/qq_15711195/article/details/147531108【Android】四大组件之BroadcastReceiver-CSDN博客文章浏览阅读714次,点赞14次,收藏20次。BroadcastReceiver用于监听系统或应用发出的广播事件,实现跨组件通信。
https://blog.csdn.net/qq_15711195/article/details/1476434862. 两种类型
类型 | 特点 | 适用场景 |
---|---|---|
显式 | 明确指定目标组件类名,如Intent(A.this, B.class) | 应用内部通信 |
隐式 | 通过Action/Category等属性匹配组件 | 跨应用或系统功能调用,如启动系统相机 |
3. 核心属性
属性名 | 功能说明 | 示例用法 |
---|---|---|
Component | 显式指定目标组件类名 | intent.setClass(this, SecondActivity.class) |
Action | 定义执行动作 | intent.setAction(Intent.ACTION_VIEW) |
Category | 补充Action的附加信息 | intent.addCategory(Intent.CATEGORY_DEFAULT) |
Data | 指定操作数据URI | intent.setData(Uri.parse("https://www.example.com")) |
Type | 设置MIME类型(与Data互斥) | intent.setType("image/*") |
Extras | 通过Bundle 携带附加数据 | intent.putExtra("username", "John") |
Flags | 控制启动模式 | intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) |
二、显式Intent
1. Activity跳转
源activity跳转:
// 基础跳转:无返回函数调用
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
startActivity(intent);// 带返回值跳转:在onActivityResult中接收返回值
startActivityForResult(intent, 100); // 请求码为100
目标Activity返回数据:
// 目标Activity返回数据
Intent resultIntent = new Intent();
resultIntent.putExtra("result", "Success");
setResult(RESULT_OK, resultIntent);
finish();
源activity接收返回结果:
// 接收返回结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode == 100 && resultCode == RESULT_OK) {String result = data.getStringExtra("result"); // 获取返回数据}
}
2. 启动Service
// 启动后台服务
Intent serviceIntent = new Intent(this, DownloadService.class);
serviceIntent.putExtra("url", "https://example.com/file.zip");
startService(serviceIntent); // 执行一次性任务
- 避免在
onPause()
后执行startActivityForResult()
- 及时解绑Service防止内存泄漏
三、隐式Intent
1. 调用系统功能
// 打开网页
Intent webIntent = new Intent(Intent.ACTION_VIEW);
webIntent.setData(Uri.parse("https://www.android.com"));
if (webIntent.resolveActivity(getPackageManager()) != null) {startActivity(webIntent); // 安全检测避免崩溃
}// 分享文本
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, "Check this out!");
startActivity(Intent.createChooser(shareIntent, "Share via"));
2. 自定义Action处理
AndroidManifest.xml声明:
<!-- AndroidManifest.xml声明 -->
<activity android:name=".CustomActivity"><intent-filter><action android:name="com.example.ACTION_CUSTOM"/><category android:name="android.intent.category.DEFAULT"/><data android:mimeType="text/*"/></intent-filter>
</activity>
发送自定义Intent:
Intent customIntent = new Intent("com.example.ACTION_CUSTOM");
customIntent.putExtra("custom_data", "Hello Custom");
startActivity(customIntent);
3. 使用resolveActivity()
检测可用组件避免崩溃
if (intent.resolveActivity(packageManager) != null) {startActivity(intent)
}
四、复杂数据传递
1. Bundle封装
发送方:
Bundle bundle = new Bundle();
bundle.putString("name", "Android");
bundle.putInt("version", 13);Intent intent = new Intent(this, TargetActivity.class);
intent.putExtras(bundle);
接收方:
Bundle receivedBundle = getIntent().getExtras();
if(receivedBundle != null) {String name = receivedBundle.getString("name");
}
2. Parcelable对象传输
// 自定义Parcelable类
public class User implements Parcelable {private String name;private int age;// 实现Parcelable接口方法@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(name);dest.writeInt(age);}public static final Creator<User> CREATOR = new Creator<User>() {@Overridepublic User createFromParcel(Parcel in) {return new User(in);}}; // 完整实现需补充
}// 传递对象
User user = new User("John", 25);
intent.putExtra("user", user);
3. 类型冲突处理
同时设置Data和Type时使用setDataAndType():
intent.setDataAndType(Uri.parse("content://contacts/people/1"),"text/vnd.android.cursor.item"
);
五、跨应用权限管理
场景类型 | 权限需求 | 典型示例 |
---|---|---|
启动外部组件 | 声明使用其他应用暴露的权限 | 调用系统相机、地图应用 |
暴露自身组件 | 定义自定义权限保护自身组件 | 允许特定应用访问私有Activity |
1. 声明使用其他应用暴露的权限
示例:调用系统相机拍照并保存到应用私有目录。
在应用AndroidManifest.xml声明所需权限,在FileProvider声明中配置路径:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.app"><!-- 权限声明区域 --><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application><!-- FileProvider 组件声明 --><providerandroid:name="androidx.core.content.FileProvider"android:authorities="com.example.fileprovider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /> <!-- 关联外部路径文件 --></provider><!-- 其他组件声明(Activity/Service 等) --></application></manifest>
动态申请危险权限:
private static final int REQUEST_CAMERA_PERMISSION = 100;private void checkCameraPermission() {if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},REQUEST_CAMERA_PERMISSION);} else {launchCamera();}
}
处理权限请求结果:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {if (requestCode == REQUEST_CAMERA_PERMISSION) {if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {launchCamera();} else {Toast.makeText(this, "需要相机权限", Toast.LENGTH_SHORT).show();}}
}
创建带权限的Intent:
private void launchCamera() {Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);if (takePictureIntent.resolveActivity(getPackageManager()) != null) {File photoFile = createImageFile(); // 创建临时文件Uri photoURI = FileProvider.getUriForFile(this,"com.example.fileprovider", // 与manifest中配置一致photoFile);// 授予临时访问权限takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);// 系统默认相机应用// 或其他支持 MediaStore.ACTION_IMAGE_CAPTURE Action 的第三方相机应用startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);}
}
2. 定义自定义权限保护自身组件
示例:定义私有Activity只允许持有特定权限的应用访问。
在提供方应用的AndroidManifest.xml定义自定义权限:
<permissionandroid:name="com.example.PRIVATE_ACCESS"android:label="私有访问权限"android:protectionLevel="signature" /> <!-- 只允许相同签名的应用 --><activityandroid:name=".PrivateActivity"android:permission="com.example.PRIVATE_ACCESS"><intent-filter><action android:name="com.example.action.ACCESS_PRIVATE" /><category android:name="android.intent.category.DEFAULT" /></intent-filter>
</activity>
在使用方应用的AndroidManifest.xml声明使用该权限 :
<uses-permission android:name="com.example.PRIVATE_ACCESS" />
使用方发起请求:
public void openPrivateActivity() {try {Intent intent = new Intent("com.example.action.ACCESS_PRIVATE");startActivity(intent);} catch (SecurityException e) {Log.e("Permission", "缺少访问权限: " + e.getMessage());// 处理无权限情况}
}
3. 临时URI权限授予
当通过Intent传递文件URI时,
发送方授予读取权限:
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
接收方需在onCreate()中保留权限:
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getIntent().setFlags(getIntent().getFlags()& ~Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
4. 包可见性适配(Android 11+)
<!-- 在调用方清单文件中声明目标包名 -->
<queries><package android:name="com.target.package" /><!-- 或通过intent-filter声明 --><intent><action android:name="android.intent.action.VIEW" /><data android:scheme="https" /></intent>
</queries>
5. 运行时权限检查
// 检查是否具有自定义权限
private boolean checkCustomPermission() {int result = checkCallingOrSelfPermission("com.example.PRIVATE_ACCESS");return result == PackageManager.PERMISSION_GRANTED;
}// 在组件入口处验证
public class PrivateActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (!checkCustomPermission()) {finish();return;}// 继续执行}
}
- 最小权限原则:只申请必要的权限
- 防御式编程:关键操作前进行权限检查
- 错误处理:捕获
SecurityException
并提供友好提示- 权限文档:在应用描述中说明权限用途
- 兼容性测试:在不同API级别验证权限行为
六、常见问题
问题1:SecurityException: Permission Denial
原因分析:
- 组件未声明所需权限
- 调用方未声明使用权限
- 签名不匹配(针对
protectionLevel="signature"
)
排查步骤:
- 检查双方应用的AndroidManifest权限声明
- 使用
adb shell dumpsys package [package名]
查看权限授予状态 - 验证APK签名是否一致
问题2:FileProvider权限失效
解决方案:
// 授予接收方临时权限列表
List<ResolveInfo> resInfoList = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {grantUriPermission(resolveInfo.activityInfo.packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
相关文章:
【Android】Intent
目录 一、什么是Intent 二、显式Intent 三、隐式Intent 四、复杂数据传递 五、跨应用权限管理 六、常见问题 一、什么是Intent 1. 跨组件通信桥梁 实现组件间通信(Activity/Service/BroadcastReceiver)封装操作指令与数据传输逻辑 目标组件启动…...
从0开始建立Github个人博客(hugoPaperMod)
从0开始建立Github个人博客(hugo&PaperMod) github提供给每个用户一个网址,用户可以建立自己的静态网站。 一、Hugo hugo是一个快速搭建网站的工具,由go语言编写。 1.安装hugo 到hugo的github标签页Tags gohugoio/hugo选择一个版本,…...
Python集合全解析:从基础到高阶应用实战
一、集合核心特性与创建方法 1.1 集合的本质特征 Python集合(Set)是一种无序且元素唯一的容器类型,基于哈希表实现,具有以下核心特性: 唯一性:自动过滤重复元素无序性ÿ…...
Matlab自学笔记
一、我下载的是Matlab R2016a软件,打开界面如下: 二、如何调整字体大小,路径为:“主页”->“预设”->“字体”。 三、命令行窗口是直接进行交互式的,如下输入“3 5”,回车,就得到结果“…...
Python爬虫实战:获取好大夫在线各专业全国医院排行榜数据并分析,为患者就医做参考
一、引言 在当今医疗资源丰富但分布不均的背景下,患者在选择合适的心血管内科医院时面临诸多困难。好大夫在线提供的医院排行榜数据包含了医院排名、线上服务得分、患者评价得分等重要信息,对患者选择医院具有重要的参考价值。本研究通过爬取该排行榜数据,并进行深入分析,…...
多模态人工智能研究:视觉语言模型的过去、现在与未来
多模态人工智能研究:视觉语言模型的过去、现在与未来 1. 引言:定义多模态图景 多模态人工智能指的是旨在处理和整合来自多种数据类型或“模态”信息的人工智能系统,这些模态包括文本、图像、音频和视频等。与通常侧重于单一模态(…...
DeepSeek+Excel:解锁办公效率新高度
目录 一、引言:Excel 遇上 DeepSeek二、认识 DeepSeek:大模型中的得力助手2.1 DeepSeek 的技术架构与原理2.2 DeepSeek 在办公场景中的独特优势 三、DeepSeek 与 Excel 结合的准备工作3.1 获取 DeepSeek API Key3.2 配置 Excel 环境 四、DeepSeekExcel 实…...
3033. 修改矩阵
题目来源: leetcode题目:3033. 修改矩阵 - 力扣(LeetCode) 解题思路: 获取每列的最大值后将-1替换即可。 解题代码: #python3 class Solution:def getMaxRow(matrix:List[List[int]])->List[int]:r…...
Android面试总结之jet pack模块化组件篇
一、ViewModel 深入问题 1. ViewModel 如何实现跨 Fragment 共享数据?其作用域是基于 Activity 还是 Fragment? 问题解析: ViewModel 的作用域由 ViewModelStoreOwner 决定。当 Activity 和其内部 Fragment 共享同一个 ViewModelStoreOwner…...
【无需docker】mac本地部署dify
环境安装准备 #安装 postgresql13 brew install postgresql13 #使用zsh的在全局添加postgresql命令集 echo export PATH"/usr/local/opt/postgresql13/bin:$PATH" >> ~/.zshrc # 使得zsh的配置修改生效 source ~/.zshrc # 启动postgresql brew services star…...
清洗数据集
将label在图片上画出来 按照第一行的属性分类 import os import cv2 import multiprocessing as mp from tqdm import tqdm# ---------- 路径配置 ---------- # IMAGE_DIR = r"C:\Users\31919\Desktop\datasets\13k_100drive_raw_with_hand\images\test" LABEL_DIR =…...
支持向量机(SVM)详解
引言 支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,主要用于分类和回归任务。其核心思想是找到一个最优的决策边界(超平面),最大化不同类别之间的间隔(Margin)…...
MIT XV6 - 1.2 Lab: Xv6 and Unix utilities - pingpong
接上文 MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - user/_sleep 是什么?做什么? pingpong 不务正业了那么久(然而并没有,虽然还在探索sleep,但是教材我已经看完了前三章了),让我们赶紧继续下去 在进行本实验之前请务…...
“淘宝闪购”提前4天全量,意味着什么?
4月30日推出,首日上线50个城市,既定5月6日推广至全国的“淘宝闪购”,突然在5月2日早上官宣,提前4天面向全国消费者全量开放。 这一系列节奏,剑指一个字“快”! 是业务发展远超预期的“快”。 4月30日&am…...
Servlet 解决了什么问题?
Servlet 主要解决了以下几个核心问题: 性能问题 (Performance): CGI 的问题: 传统的 CGI 技术为每个Web 请求都启动一个新的进程。进程的创建和销毁涉及大量的系统资源开销(内存分配、CPU 时间、进程上下文切换等)。在高并发场景下…...
Cherry Studio的MCP协议集成与应用实践:从本地工具到云端服务的智能交互
Cherry Studio的MCP协议集成与应用实践:从本地工具到云端服务的智能交互 一、MCP协议与Cherry Studio的技术融合 MCP(Model Context Protocol) 是由Anthropic提出的标准化协议,旨在为AI模型提供与外部工具交互的通用接口。通过M…...
CPU:AMD的线程撕裂者(Threadripper)系列
AMD的线程撕裂者(Threadripper)系列是AMD面向高性能计算(HPC)、工作站(Workstation)和高端桌面(HEDT)市场推出的顶级处理器产品线。该系列以极高的核心数、强大的多线程性能、丰富的…...
(即插即用模块-Attention部分) 六十二、(2022) LKA 大核注意力
文章目录 1、Larger Kernel Attention2、代码实现 paper:Visual Attention Network Code:https://github.com/Visual-Attention-Network 1、Larger Kernel Attention 自注意力机制在 NLP 领域取得了巨大成功,但其应用于计算机视觉任务时存在…...
Spring 分批处理 + 冷热数据分离:历史订单高效迁移与数据清理实战
在实际业务中,随着时间推移,订单量持续增长,若未及时进行数据治理,会造成数据库膨胀、查询缓慢、性能下降等问题。为了实现数据分层管理和系统高性能运行,我们在项目中采用了“冷热数据分离 分批迁移 数据清理”的综…...
Mybatis中的一级二级缓存扫盲
思维导图: MyBatis 提供了一级缓存和二级缓存机制,用于提高数据库查询的性能,减少对数据库的访问次数。(本质上是减少IO次数)。 一级缓存 1. 概念 一级缓存也称为会话缓存,它是基于 SqlSession 的缓存。在同…...
Elasticsearch 常用的 API 接口
文档类 API Index API :创建并建立索引,向指定索引添加文档。例如:PUT /twitter/tweet/1 ,添加一个文档。 Get API :获取文档,通过索引、类型和 ID 获取文档。如GET /twitter/tweet/1。 DELETE API &…...
纯前端专业PDF在线浏览器查看器工具
纯前端专业PDF在线浏览器查看器工具 工具简介 我们最新开发的PDF在线浏览器工具现已发布!这是一个基于Web的轻量级PDF阅读器,无需安装任何软件,直接在浏览器中即可查看和操作PDF文档。 主要功能 ✅ PDF文件浏览 支持本地PDF文件上传流畅的…...
传奇各职业/战士/法师/道士手套/手镯/护腕/神秘腰带爆率及出处产出地/圣战/法神/天尊/祈祷/虹魔/魔血
护腕排行(战士): 名字攻击攻击(均)魔法魔法(均)道术道术(均)防御防御(均)魔御魔御(均)重量要求图标外观产出圣战手镯2-32.50-000-000-10.50-002攻击: 400.02%双头金刚(50级/5000血/不死系)|赤月魔穴(1725,2125)60分钟2只 0.02%双头血魔(55级/5000血/不死系)|赤月魔穴(1725,212…...
觅知解析计费系统重构版在线支付卡密充值多解析接口免授权无后门源码扶风二开
一、源码描述 这是一套视频解析计费源码(扶风二开),可配置多接口和专用特征解析接口,对接在线支付和卡密支付,支持在线充值和卡密充值,支持点数收费模式和包月套餐收费模式,可配置多个视频解析…...
C++11新特性_委托构造函数
格式定义 在 C11 里,委托构造函数的格式为:一个构造函数能够在其成员初始化列表里调用同一个类的其他构造函数。基本语法如下: class ClassName { public:// 被委托的构造函数(目标构造函数)ClassName(参数列表1) : …...
网工_IP协议
2025.02.17:小猿网&网工老姜学习笔记 第19节 IP协议 9.1 IP数据包的格式(首部数据部分)9.1.1 IP协议的首部格式(固定部分可变部分) 9.2 IP数据包分片(找题练)9.3 TTL生存时间的应用9.4 常见…...
C++负载均衡远程调用学习之QPS性能测试
目录 1.昨日回顾 2.QPS_TEST_PROTOBUF协议的集成 3.QPS_TEST_SERVER端实现 4.QPS_TEST_QPS简单介绍 5.QPS_TEST_QPS客户端工具编写和性能测试 1.昨日回顾 2.QPS_TEST_PROTOBUF协议的集成 ## 14) Reactor框架QPS性能测试 接下来我们写一个测试用例来测一下我们…...
C++负载均衡远程调用学习之消息队列与线程池
目录 1.昨日回顾 2.单线程的多路IO服务器模型和多线程模型区别 3.服务器的集中并发模式 4.LARSV0.8-task_msg消息队列任务数据类型 5.LARSV0.8--thread_queue消息队列的发送和接收流 6.LARSV0.8-thread_pool线程池的实现 7.LARSV0.8-thread_pool线程池的实现 8.LARSV0.8…...
Kotlin 基础
Kotlin基础语法详解 Kotlin是一种现代静态类型编程语言,由JetBrains开发,与Java完全互操作。以下是Kotlin的基础语法详解: 1. 基本语法 1.1 变量声明 // 不可变变量(推荐) val name: String = "Kotlin" val age = 25 // 类型推断// 可变变量 var count: In…...
实验数据的转换
最近做实验需要把x轴y轴z轴的数据处理一下,总结一下解决的方法: 源文件为两个txt文档,分别为x轴和y轴,如下: 最终需要达到的效果是如下: 就是需要把各个矩阵的数据整理好放在同一个txt文档里。 步骤① …...
多种尝试解决Pycharm无法粘贴外部文本【本人问题已解决】
#作者:允砸儿 #日期:乙巳青蛇年 四月初五 笔者在写demo的时候遇到一个非常棘手的问题就是pycharm无法复制粘贴,笔者相信有很多的朋友遇到过这种问题,笔者结合搜素到的和自己揣摩出来的方法帮助朋友们解决这种问题。 1、第一种…...
【C++】红黑树迭代版
目录 前言: 一:什么是红黑树? 二:插入什么颜色节点? 三:定义树 四:左单旋和右单旋 1.右单旋 2.左单旋 五:调整树 1.当parent节点为黑色时 2.当parent节点为红色时 2.1 u…...
OSPF路由协议配置
初始环境与准备: 物理连接:按照文件的拓扑连接了 3 台路由器 (R01, R02, R03)、2 台交换机 (Switch0, Switch1) 和 2 台 PC (PC0, PC1)。关键发现:路由器之间的连接实际使用的是以太网线(连接到 FastEthernet 接口),而不是串口线。…...
linux下抓包工具--tcpdump介绍
文章目录 1. 前言2. 命令介绍3. 常见选项3.1. 接口与基本控制3.2 输出控制3.3 文件操作3.4 高级调试 4. 过滤表达式4.1 协议类型4.2 方向与地址4.3 逻辑运算符 5. 典型使用场景5.1 网络故障排查5.2 安全分析与入侵检测5.3 性能分析与优化 linux下抓包工具--tcpdump介绍 1. 前言…...
探索 Disruptor:高性能并发框架的奥秘
在当今的软件开发领域,处理高并发场景是一项极具挑战性的任务。传统的并发解决方案,如基于锁的队列,往往在高负载下表现出性能瓶颈。而 Disruptor 作为一个高性能的并发框架,凭借其独特的设计和先进的技术,在处理海量数…...
smss源代码分析之smss!SmpLoadSubSystemsForMuSession函数分析加载csrss.exe
第一部分: Next SmpSubSystemsToLoad.Flink; while ( Next ! &SmpSubSystemsToLoad ) { p CONTAINING_RECORD( Next, SMP_REGISTRY_VALUE, Entry )…...
《AI大模型应知应会100篇》第44篇:大模型API调用最佳实践(附完整代码模板)
第44篇:大模型API调用最佳实践(附完整代码模板) 摘要 当你的应用突然面临每秒1000请求时,如何保证大模型API调用既稳定又经济?本文通过12个实战代码片段、3套生产级架构方案和20优化技巧,带你构建高性能的…...
第5篇:EggJS中间件开发与实战应用
在Web开发中,中间件(Middleware)是处理HTTP请求和响应的核心机制之一。EggJS基于Koa的洋葱模型实现了高效的中间件机制,本文将深入探讨中间件的执行原理、开发实践以及常见问题解决方案。 一、中间件执行机制与洋葱模型 1. 洋葱模…...
数字智慧方案6187丨智慧应急指挥平台体系建设方案(78页PPT)(文末有下载方式)
数字智慧方案6187丨智慧应急指挥平台体系建设方案 详细资料请看本解读文章的最后内容。 引言 随着社会经济的快速发展,应急管理面临着越来越复杂的挑战。智慧应急指挥平台体系的建设,旨在通过先进的信息技术和智能化手段,提升应急管理的效…...
Linux 常用命令 - tar【归档与压缩】
简介 tar 这个名称来源于 “tape archive”,最初设计用于将文件归档到磁带上。现在,tar 命令已经成为 Linux 系统中最常用的归档工具,它可以将多个文件和目录打包成一个单独的归档文件,并且可以选择使用不同的压缩算法进行压缩&a…...
python常用科学计算库及使用示例
一、NumPy - 数值计算基础库 安装 pip install numpy 核心功能示例 1. 数组创建与运算 import numpy as np# 创建数组 arr np.array([1, 2, 3, 4]) matrix np.array([[1, 2], [3, 4]])# 数学运算 print(arr 1) # [2 3 4 5] print(matrix …...
【中间件】brpc_基础_bthread头文件
bthread.h学习笔记 源码 1 概述 bthread.h 定义了一个用户级线程库,提供类似 POSIX 线程(pthread)的功能,但针对高并发和调度优化进行了扩展。支持线程管理、同步原语、中断机制、线程特定数据等功能,适用于需要高效…...
【AI面试准备】Git与CI/CD及单元测试实战指南
介绍Git、CI/CD 流程、单元测试框架(如 NUnit、JUnit)。如何快速掌握,以及在实际工作中如何运用 目录 一、Git:分布式版本控制系统核心概念高频命令实战建议 二、CI/CD:自动化交付流水线核心流程工具链组合关键配置示…...
个人健康中枢的多元化AI软件革新与精准健康路径探析
引言 人工智能技术的迅猛发展正在重塑医疗健康领域的服务模式和用户体验。随着多模态大模型、MCP协议、A2A协议和思考链算法等创新技术的出现,个人健康中枢正在经历一场深刻的软件革新。这些技术不仅打破了传统健康管理系统的信息孤岛,还通过多维度数据整合和深度推理能力,…...
Java文件上传
war包利用 WAR包结构详解-CSDN博客 Tomcat弱口令及war包漏洞复现(保姆级教程)-CSDN博客 Tomcat 8.x弱口令获取manager权限上传任意war包漏洞复现 - Stunmaker - 博客园...
Python项目源码63:病历管理系统1.0(tkinter+sqlite3+matplotlib)
1.病历管理系统包含以下主要功能: 核心功能:病历信息录入(患者姓名、年龄、性别、诊断结果、主治医生),自动记录就诊时间,病历信息展示(使用Treeview表格),病历信息查询…...
Unity 与 Lua 交互详解
Unity 与 Lua 的交互是热更新实现的核心技术,下面我将从底层原理到实际应用全面解析交互机制。 一、交互基础原理 1. 通信架构 Unity (C#) 原生层↑↓ 通过P/Invoke调用 Lua虚拟机层 (C/C实现)↑↓ Lua脚本解释执行 业务逻辑层 (Lua脚本) 2. 数据类型映射表 Lu…...
【Vue】Vue与UI框架(Element Plus、Ant Design Vue、Vant)
个人主页:Guiat 归属专栏:Vue 文章目录 1. Vue UI 框架概述1.1 主流Vue UI框架简介1.2 选择UI框架的考虑因素 2. Element Plus详解2.1 Element Plus基础使用2.1.1 安装与引入2.1.2 基础组件示例 2.2 Element Plus主题定制2.3 Element Plus的优缺点分析 3…...
期刊、出版社、索引数据库
image 1、研究人员向期刊或者会议投稿,交注册费和相应的审稿费等相关费用[1]; 2、会议组织者和期刊联系出版社,交出版费用; 3、出版社将论文更新到自己的数据库中,然后将数据库卖给全世界各大高校或企业; 4…...
btrace2.0使用方法
2022 年我研究安卓性能优化的时候,写过一篇:btrace1.0使用方法 - Wesley’s Blog,现在 brace 进化到 2.0 了,让我们一起来看看如何使用。 具体的接入流程可以看官方文档: bytedance/btrace: 🔥ǵ…...