Android 14 系统统一修改app启动时图标大小和圆角
Android 14 统一修改app启动时图标大小和圆角
修改如下:
目录:frameworks/base/core/java/android/window/SplashScreenView.java
frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.ColorInt;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
import android.annotation.UiThread;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Outline;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.RemoteCallback;
import android.os.Trace;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.SurfaceControlViewHost;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewOutlineProvider;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.android.internal.R;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.policy.DecorView;
import java.time.Duration;mUiThreadInitTask.accept(() -> view.mIconView = createSurfaceView(view));} else {view.mIconView = createSurfaceView(view);}view.initIconAnimation(mIconDrawable);view.mIconAnimationStart = mIconAnimationStart;view.mIconAnimationDuration = mIconAnimationDuration;} else if (mIconSize != 0) {ImageView imageView = view.findViewById(R.id.splashscreen_icon_view);assert imageView != null;//start add codeimageView.setOutlineProvider(new ViewOutlineProvider() {@Overridepublic void getOutline(View view, Outline outline) {outline.setRoundRect(0,0,view.getWidth(),view.getHeight(),40);}});imageView.setClipToOutline(true);// end add codefinal ViewGroup.LayoutParams params = imageView.getLayoutParams();params.width = mIconSize;params.height = mIconSize;imageView.setLayoutParams(params);if (mIconDrawable != null) {imageView.setImageDrawable(mIconDrawable);imageView.setScaleType(ImageView.ScaleType.FIT_XY);}if (mIconBackground != null) {imageView.setBackground(mIconBackground);}hasIcon = true;view.mIconView = imageView;}if (mOverlayDrawable != null || (!hasIcon && !mAllowHandleSolidColor)) {view.setNotCopyable();}private Bitmap mBrandingBitmap;private long mIconAnimationStartMillis;private long mIconAnimationDurationMillis;private SurfaceControlViewHost.SurfacePackage mSurfacePackage;private RemoteCallback mClientCallback;public SplashScreenViewParcelable(SplashScreenView view) {final View iconView = view.getIconView();//start add codeif(mIconSize==0){mIconSize = iconView != null ? iconView.getWidth() : 0;}// end add codemBackgroundColor = view.getInitBackgroundColor();mIconBackground = iconView != null ? copyDrawable(iconView.getBackground()) : null;mSurfacePackage = view.mSurfacePackageCopy;if (mSurfacePackage == null) {// We only need to copy the drawable if we are not using a SurfaceViewmIconBitmap = iconView != null? copyDrawable(((ImageView) view.getIconView()).getDrawable()) : null;}mBrandingBitmap = copyDrawable(view.getBrandingView().getBackground());
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityThread;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.AdaptiveIconDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.util.DisplayMetrics;
import android.util.Slog;
import android.view.ContextThemeWrapper;
import android.view.Display;
import android.view.SurfaceControl;
import android.view.WindowManager;
import android.window.SplashScreenView;
import android.window.StartingWindowInfo;
import android.window.StartingWindowInfo.StartingWindowType;
import com.android.ex.camera2.portability.debug.Log;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.graphics.palette.Palette;
import com.android.internal.graphics.palette.Quantizer;
import com.android.internal.graphics.palette.VariationalKMeansQuantizer;
import com.android.internal.protolog.common.ProtoLog;
import com.android.launcher3.icons.BaseIconFactory;
import com.android.launcher3.icons.IconProvider;
import com.android.wm.shell.common.TransactionPool;
import com.android.wm.shell.protolog.ShellProtoLogGroup;mAllowHandleSolidColor = allowHandleSolidColor;return this;}SplashScreenView build() {Drawable iconDrawable;if (mSuggestType == STARTING_WINDOW_TYPE_SOLID_COLOR_SPLASH_SCREEN|| mSuggestType == STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN) {// empty or legacy splash screen casemFinalIconSize = 0;// start add code
// } else if (mTmpAttrs.mSplashScreenIcon != null) {
// // Using the windowSplashScreenAnimatedIcon attribute
// iconDrawable = mTmpAttrs.mSplashScreenIcon;// // There is no background below the icon, so scale the icon up
// if (mTmpAttrs.mIconBgColor == Color.TRANSPARENT
// || mTmpAttrs.mIconBgColor == mThemeColor) {
// mFinalIconSize *= NO_BACKGROUND_SCALE;
// }
// createIconDrawable(iconDrawable, false /* legacy */, false /* loadInDetail */);// end add code } else {android.util.Log.d("xuping","SplashScreenContentDrawer--build---22222");final float iconScale = (float) mIconSize / (float) mDefaultIconSize;final int densityDpi = mContext.getResources().getConfiguration().densityDpi;final int scaledIconDpi =(int) (0.5f + iconScale * densityDpi * NO_BACKGROUND_SCALE);Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "getIcon");iconDrawable = mHighResIconProvider.getIcon(mActivityInfo, densityDpi, scaledIconDpi);Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);// start add code
// if (!processAdaptiveIcon(iconDrawable)) {
// ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
// "The icon is not an AdaptiveIconDrawable");
// Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "legacy_icon_factory");
// final ShapeIconFactory factory = new ShapeIconFactory(
// SplashscreenContentDrawer.this.mContext,
// scaledIconDpi, mFinalIconSize);
// final Bitmap bitmap = factory.createScaledBitmap(iconDrawable,
// BaseIconFactory.MODE_DEFAULT);
// Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
// createIconDrawable(new BitmapDrawable(bitmap), true,
// mHighResIconProvider.mLoadInDetail);
// }// end add codecreateIconDrawable(iconDrawable, true , mHighResIconProvider.mLoadInDetail);}return fillViewWithIcon(mFinalIconSize, mFinalIconDrawables, mUiThreadInitTask);}private class ShapeIconFactory extends BaseIconFactory {protected ShapeIconFactory(Context context, int fillResIconDpi, int iconBitmapSize) {super(context, fillResIconDpi, iconBitmapSize, true /* shapeDetection */);}}private Context mStandaloneContext;private IconProvider mStandaloneIconProvider;HighResIconProvider(Context context, IconProvider sharedIconProvider) {mSharedContext = context;mSharedIconProvider = sharedIconProvider;}Drawable getIcon(ActivityInfo activityInfo, int currentDpi, int iconDpi) {mLoadInDetail = false;// strat add codeDrawable drawable = getAppIconFromPackageName(mSharedContext,activityInfo.applicationInfo.packageName);
// if (currentDpi < iconDpi && currentDpi < DisplayMetrics.DENSITY_XHIGH) {drawable = loadFromStandalone(activityInfo, currentDpi, iconDpi);
// } else {
// drawable = mSharedIconProvider.getIcon(activityInfo, iconDpi);
// }
// if (drawable == null) {
// drawable = mSharedContext.getPackageManager().getDefaultActivityIcon();
// }// end add codereturn drawable;}// strat add codepublic Drawable getAppIconFromPackageName(Context context, String packageName) {PackageManager packageManager = context.getPackageManager();Drawable appIcon =null;try {ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, 0);appIcon = packageManager.getApplicationIcon( applicationInfo);} catch (Exception e) {android.util.Log.d(TAG,"getAppIconFromPackageName Null");}return appIcon;}// end add codeprivate Drawable loadFromStandalone(ActivityInfo activityInfo, int currentDpi,int iconDpi) {if (mStandaloneContext == null) {final Configuration defConfig = mSharedContext.getResources().getConfiguration();mStandaloneContext = mSharedContext.createConfigurationContext(defConfig);mStandaloneIconProvider = new IconProvider(mStandaloneContext);}Resources resources;try {resources = mStandaloneContext.getPackageManager()
相关文章:
Android 14 系统统一修改app启动时图标大小和圆角
Android 14 统一修改app启动时图标大小和圆角 修改如下: 目录:frameworks/base/core/java/android/window/SplashScreenView.java frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.ja…...
MySQL 详解之函数:数据处理与计算的利器
在 MySQL 中,函数可以接受零个或多个输入参数,并返回一个值。这些函数可以在 SELECT 语句的字段列表、WHERE 子句、HAVING 子句、ORDER BY 子句以及 UPDATE 和 INSERT 语句中使用。合理利用函数,可以简化 SQL 语句,提高开发效率。 MySQL 提供了大量的内置函数 (Built-in F…...
Tailwind CSS 实战:基于 Kooboo 构建企业官网页面(一)
目录 一、技术选型:为什么选择Tailwind Kooboo? 二、CDN方案 vs 传统安装 三、CDN方式实战步骤 一、技术选型:为什么选择Tailwind Kooboo? 1.1 黄金组合优势 Tailwind CSS:原子化CSS框架,提供&#x…...
Java基础 — 条件结构与随机数
介绍 Java条件结构与随机数是程序逻辑控制的重要工具。条件结构通过if-else和switch实现分支判断:if(条件){代码}用于单分支,else if添加多条件判断,switch则基于固定值匹配不同case。随机数生成常用两种方式:Math.random()方法返…...
AI网络渗透kali应用(gptshell)
kali安装gptshell 一、shellGPT 工具介绍 ShellGPT是一款由AI大型语言模型(LLM)驱动的终端命令行工具。它能帮助用户直接在终端与AI交互,自动生成、解释、执行各类 Linux 命令,大大提升了运维和开发效率。ShellGPT 支持接入 O…...
如何实现Android屏幕和音频采集并启动RTSP服务?
技术背景 在移动直播和视频监控领域,实现高效的屏幕和音频采集并提供流媒体服务是关键技术之一。本文将详细介绍如何基于大牛直播SDK实现Android屏幕和麦克风/扬声器采集,并启动轻量级RTSP服务以对外提供拉流的RTSP URL。在Android平台上,轻…...
大模型提示词如何编写
一、提示词的核心三要素 明确目标(What) 告诉 AI「你要它做什么」,越具体越好。 ❌ 模糊:写一篇文章 ✅ 清晰:写一篇 800 字的高考作文,主题 “坚持与创新”,结构分引言、三个论点(…...
Serverless 在云原生后端的实践与演化:从函数到平台的革新
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从服务器到“无服务器”的后端演变 在传统后端开发中,我们需要为服务配置并维护服务器资源,无论是物理机、虚拟机还是容器化服务,都需要: 管理系统运行环境 监控负载与扩缩容 保证高可用与安…...
反爬虫机制中的验证码识别:类型、技术难点与应对策略
在互联网数据抓取领域,验证码识别是爬虫过程中的关键环节之一。下面对常见验证码类型、技术难点及应对策略进行详细解析,并提供多种场景下的代码实现示例。 一、验证码类型与技术难点 (一)图形验证码 1. 字符验证码 特征&#…...
.NET 10 中的新增功能
.NET 运行时 .NET 10 运行时引入了新功能和性能改进。 关键更新包括: 数组接口方法反虚拟化:JIT 现在可以取消虚拟化和内联数组接口方法,从而提高数组枚举的性能。数组枚举去抽象化:改进功能以通过枚举器减少数组迭代的抽象开销…...
通过音频的pcm数据格式利用canvas绘制音频波形图
上面是一个完整的音频的波形图,可以大概知道音频整个的简略信息 数据准备:需要有这个音频的pcm数据,也就是时域采样值,每个数字代表某一时刻音频波形的振幅。 <!DOCTYPE html> <html lang"en"> <head&…...
Dubbo负载均衡策略深度解析
互联网大厂Java求职者面试:Dubbo负载均衡策略详解 第一轮提问: 面试官:马架构,您好!请问您了解Dubbo的负载均衡策略吗?Dubbo支持哪些负载均衡策略呢? 马架构:您好!Dub…...
【高频考点精讲】async/await原理剖析:Generator和Promise的完美结合
async/await原理剖析:Generator和Promise的完美结合 今天咱们聊聊async/await,这玩意儿用起来是真香,但你知道它背后是怎么运作的吗?其实它就是Generator和Promise的"爱情结晶"。 1. 先搞懂Generator Generator&…...
量子加密通信技术及其应用:构建无条件安全的通信网络
一、引言 在数字化时代,信息安全成为全球关注的焦点。随着量子计算技术的快速发展,传统的加密算法面临着前所未有的挑战。量子加密通信技术应运而生,它利用量子力学的基本原理,如量子叠加态和量子纠缠,实现了无条件安全…...
软考中级-软件设计师 知识点速过1(手写笔记)
第一章:数值及其转换 没什么可说的,包括二进制转八进制和十六进制 第二章:计算机内部数据表示 真值和机器数: 原码(后面都拿x 19举例) : 反码: 补码: 移码: 定点数&…...
【prompt是什么?有哪些技巧?】
Prompt(提示词)是什么? Prompt 是用户输入给AI模型(如ChatGPT、GPT-4等)的指令或问题,用于引导模型生成符合预期的回答。它的质量直接影响AI的输出效果。 Prompt 的核心技巧 1. 明确目标(Clar…...
C++进阶----多态
目录 引言1.多态的概念2.多态的定义及实现2.1 多态的构成条件2.2虚函数2.3 虚函数的重写2.4 关键字override和final2.5 重载、覆盖(重写)、隐藏对比 3.抽象类3.1 抽象类概念 4.多态的原理4.1 虚函数表4.2虚函数表的底层4.3多态的原理4.4 动态绑定和静态绑…...
银发科技:AI健康小屋如何破解老龄化困局
随着全球人口老龄化程度的不断加深,如何保障老年人的健康、提升他们的生活质量,成为了社会各界关注的焦点。 在这场应对老龄化挑战的战役中,智绅科技顺势而生,七彩喜智慧养老系统构筑居家养老安全网。 而AI健康小屋作为一项创新…...
【黑马 微服务面试篇】
分布式事务 cap定理-Availability CAP定理-Partition tolerance BASE理论 BASE理论是对CAP的一种解决思路,包含三个思想: BasicallyAvailable(基本可用):分布式系统在出现故障时,允许损失部分可用性&#…...
斗鱼娱乐电玩平台源码搭建实录
在本篇文章中,我们将以技术人的角度详细拆解一款风格接近850平台的斗鱼娱乐电玩系统源码,包含完整服务器端、前台补全资源和双端APP构建流程。基于七月最新更新内容,本教程将突出技术关键点、实战配置与代码示范,旨在为开发者和搭…...
缓存与数据库一致性深度解析与解决方案
缓存与数据库一致性深度解析与解决方案 一、一致性问题本质与挑战 1. 核心矛盾分析 缓存与数据库一致性问题源于数据存储的异步性与分布性,核心挑战包括: 读写顺序不确定性:并发场景下写操作顺序可能被打乱(如先写缓存后写数据…...
Flutter 弹窗队列管理:支持优先级的线程安全通用弹窗队列系统
在复杂的 Flutter 应用开发中,弹窗管理是一个常见难题。手动管理弹窗的显示顺序和条件判断不仅繁琐,还容易出错。为此,我们实现了一个支持优先级的线程安全通用弹窗队列管理系统。它能够自动管理弹窗的显示顺序,支持条件判断&…...
【Langchain】RAG 优化:提高语义完整性、向量相关性、召回率--从字符分割到语义分块 (SemanticChunker)
RAG 优化:提高语义完整性、向量相关性、召回率–从字符分割到语义分块 (SemanticChunker) 背景:提升 RAG 检索质量 在构建基于知识库的问答系统(RAG)时,如何有效地将原始文档分割成合适的文本块(Chunks&a…...
Linux 官方蓝牙协议栈 BlueZ 第一篇:入门与架构概览
Linux 官方蓝牙协议栈 BlueZ,包含内核驱动、用户态守护进程和 DBus 接口,支持 Classic Bluetooth 和 BLE。本篇将从协议栈演进、架构组件、安装调试、核心流程和开发入门五个角度,结合 PlantUML 图、C/Python 代码示例,帮助你全面掌握 BlueZ 基础。 目录 协议栈演进与概念 …...
多层级的对象如何修改、或json格式
场景: 对象有多层级,一层套一层,list套对象,对象套list。 现在需要修改期中一个list的内容,怎么弄呢? 注:每一层都new一个新list再set不可取,太麻烦,看起来乱而且还容易错。 最好…...
产品动态|千眼狼sCMOS科学相机捕获单分子荧光信号
单分子荧光成像技术,作为生物分子动态研究的关键工具,对捕捉微弱信号要求严苛。传统EMCCD相机因成本高昂,动态范围有限,满阱容量低等问题,制约单分子研究成果产出效率。 千眼狼精准把握科研需求与趋势,自研…...
VsCode如何使用默认程序打开word Excel pdf等文件
如何使用在VsCode使用默认程序打开文件? 1.在插件市场里搜open插件并安装 2.安装完后,右键文件打开,点击Open with default application,就可以了 是不是非常方便!!!...
【T-MRMSM】文本引导多层次交互多尺度空间记忆融合多模态情感分析
在特征提取的部分用了k-means abstract (背景) 近年来,随着多模态数据量的迅速增加,多模态情感分析(MSA)越来越受到关注.该方法通过整合不同数据模态间的信息,提高了情感极性提取的准确性,从而实现了信息的全面融合,提高了情感分析的精度。 (针对创新处的不足) …...
python pymysql如何保证数据库更新成功
python pymysql如何保证数据库更新成功 在使用Python的PyMySQL库与MySQL数据库交互时,确保数据库更新操作成功执行,可以通过以下几种方式: 使用execute()和commit() 当执行一个更新(UPDATE)、插入(INSERT)或删除(DELETE)操作时,你需要调用execute()方法来执行SQL语句…...
Redis是单线程的,如何提高多核CPU的利用率?
一句话回答: Redis 是单线程处理客户端命令,但可以通过 多实例部署、I/O 多路复用、后台线程 Redis 6 的 I/O Thread 支持,来充分利用多核 CPU。 一、Redis 单线程 ≠ 整个 Redis 都是单线程! Redis 主要的 网络事件 命令执行 …...
01.oracle SQL基础
SQL是结构化查询语言 SQL分类 数据定义语言(DDL --- create/alter/drop) sysdate --- 可以拿到当前系统时间 案例:创建学生表,教师表,课程表 -- 学生表 create table t_student(sid number(11) primary key,sname n…...
BEVPoolv2:A Cutting-edge Implementation of BEVDet Toward Deployment
背景 该论文是在BEVDet的基础上进行了一个调整优化,传统的方法是将特征图与深度预测进行外积得到视椎特征图,再将它与预处理好的体素索引结合,将每个视椎特征分类到每个voxel中进行累加和的操作。BEVFusion与BEVDepth等方法是避免了累加和&a…...
FreeRTOS学习笔记【10】-----任务上下文切换
1 概念性内容 开机到调度需要经历的步骤有: 系统初始化任务创建启动调度器上下文切换时间分片任务执行 1.1 任务本质 FreeRTOS 的 任务(Task)本质上就是一个运行在任务自己的栈区中无限循环的函数 一段上下文(context&#x…...
PDFMathTranslate:基于LLM的PDF文档翻译及双语对照的工具【使用教程】
1.简介 PDFMathTranslate 是一个用于科学 PDF 文档翻译及双语对照的工具,是一个功能强大且灵活的科学文档翻译工具,适合科研人员、学生和专业人士使用,能够有效提高文档翻译的效率和质量。其具有以下特点和功能: 核心功能 保留格…...
CSS 入门全解析
CSS 入门全解析:从选择器到布局的全面教学 一、CSS 是什么?二、CSS 的基本语法结构三、常见选择器讲解四、盒模型讲解(重点)五、字体与颜色样式六、布局方式6.1 浮动布局(了解)6.2 Flex 弹性布局࿰…...
用户案例--慧眼科技
作者:算力魔方创始人/英特尔创新大使刘力 每个行业都有其独特的需求,算力魔方推出了全面的定制化服务,从概念到产品化,满足各行各业,用户可以根据具体应用需求定制更多接口或更强图形处理的需求,且算力魔方…...
面试中被问到mybatis与jdbc有什么区别怎么办
1. 核心区别 维度JDBCMyBatis抽象层级底层API,直接操作数据库高层持久层框架,封装JDBC细节代码量需要手动编写大量样板代码(连接、异常处理等)通过配置和映射减少冗余代码SQL管理SQL嵌入Java代码,维护困难SQL与Java代…...
科技与商业动态简报
睿创咨询 聚焦与深耕IPD领域长达20年,联合多名企业经营实战专家和前高管,睿创咨询借力IPD,为企业全方面提高产品竞争力,让增长从偶然变为必然!...
Flutter Dart中的类 对象
Dart 基本特征 私有属性/私有方法 import test88.dart;main() {var home new MainHome();home.execRun(); //间接的调用私有方法 }class MainHome {String _name "张三";//私有属性int age 10;main() {_run();print(_name);}void _run() {print("私有方法&qu…...
4G卡的DTU固件TCP通讯
4G卡DTU固件的TCP通讯 概述TCP通讯测试软硬件准备上网步骤 总结 概述 银尔达的DTU固件的4G卡可以应用到很多领域。我用的是YED-M780-B. 主要特点: 1、5~12V供电 2、工作环境为-35℃-75℃; 3、 支持1路TTL 串口,兼容3.3V电平和5V电平&#x…...
Spring Boot 读取配置文件的几种方式
Spring Boot 提供了灵活多样的方式来读取配置文件(如 application.yml 或 application.properties),本文介绍几种常见的读取方式。 1. 配置文件位置与加载顺序 Spring Boot 默认从以下位置加载配置文件(优先级从高到低࿰…...
Winform(1.Winform控件学习)
使用的控件有:Button,Label,TextBox button:表示一个按钮,用户点击按钮触发事件 click事件最常用 label:标签,用于显示文本 Name属性:变量名称 textBox:输入框 Form1代码: using System; using System.Collections.Generic; using Sy…...
解读《数据资产质量评估实施规则》:企业数据资产认证落地的关键指南
随着“数据要素市场”建设加速,数据资产逐步成为企业核心资产之一。2024年4月,由中国质量认证中心(CQC)发布的《数据资产质量评估实施规则》(编号:CQC96-831160-2024)正式实施,为企业…...
Python Transformers 库介绍
Hugging Face 的 Transformers 库是一个用于自然语言处理(NLP)的强大 Python 库,它提供了对各种预训练模型的访问和使用接口。该库具有以下特点和功能: 主要特点 丰富的预训练模型:Transformers 库包含了大量的预训练模型,如 BERT、GPT - 2、RoBERTa、XLNet 等。这些模型…...
防火墙技术深度解析:从包过滤到云原生防火墙的部署与实战
防火墙技术深度解析:从包过滤到云原生防火墙的部署与实战 在网络安全防御体系中,防火墙是第一道物理屏障,承担着“网络流量守门人”的核心角色。从早期基于IP地址的包过滤设备到如今集成AI威胁检测的云原生防火墙,其技术演进始终…...
58、微服务保姆教程(一)
一、 微服务架构概述 1、微服务架构的核心概念 微服务架构是一种软件开发架构风格,它将一个应用程序划分为多个小型、独立的服务。每个服务负责一个特定的业务功能,并能够通过轻量级的通信方式(如HTTP RESTful API、消息队列等)相互通信。在设计上,每个服务都是独立的、…...
C 语言内存分配方法及优缺点
在 C 语言开发中,内存分配的方式主要有三种:静态内存分配、栈内存分配和堆内存分配。每种分配方式都有其独特的特点、适用场景以及优缺点。 静态内存分配 静态内存分配是在编译时就确定好内存的分配,它主要用于定义全局变量和静态局部变量。…...
通过模仿学习实现机器人灵巧操作:综述(下)
25年4月来自天津大学、山东大学、瑞士ETH、南方科技大学、通用 AI 国家重点实验室、爱丁堡大学和中科院自动化所的论文“Dexterous Manipulation through Imitation Learning: A Survey”。 灵巧操作是指机械手或多指末端执行器通过精确、协调的手指运动和自适应力调制&#x…...
uni-app 引入高德地图
一、准备工作:申请密钥与环境配置 1. 申请高德地图 API 密钥 注册并登录高德开放平台 创建「Web 端 (JS API)」类型应用,获取API 密钥(Key)✅ 注意:需在「安全设置」中添加域名(如https://*.yourd…...
开源项目实战学习之YOLO11:ultralytics-cfg-datasets-Objects365、open-images-v7.yaml文件(六)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 medical - pills.yaml 通常用于配置与医学药丸检测任务相关的参数和信息 Objects365.yaml 用于配置与 Objects365 数据集相关信息的文件。Objects365 数据集包含 365 个不同的物体类别…...