当前位置: 首页 > news >正文

Android:动态更新app启动图标和应用名

一、需求背景

每逢重要佳节,很多应用启动图标会自动更新为对应佳节的图标,应用无需更新。

二、效果图

在这里插入图片描述

更新后的启动图标和应用名称
在这里插入图片描述

三、实现流程

Android app只能替换内置的icon,因此需要提前将logo图标放入App资源文件件里
实际项目App更新桌面启动图标由服务器端控制,可以在App启动页里请求全局配置接口,根据接口返回的是否更新启动图标字段值进行处理。

大多数都是用activity-alias方式更新启动图标和应用名称,但是谷歌建议新建activity继承启动页的activity,新建的activity里面是空的。

下面的代码采用新建activity继承启动页的activity方式实现动态更新App启动图标和应用名称

3.1 AndroidManifest.xml代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.Test"tools:targetApi="31"><activityandroid:name=".ui.activity.LauncherActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!--   更改启动图标和应用名称     --><!--        <activity-alias--><!--            android:name=".ui.activity.NewMainActivity"--><!--            android:enabled="false"--><!--            android:exported="true"--><!--            android:icon="@mipmap/ic_launcher_shlx"--><!--            android:label="@string/app_name2"--><!--            android:targetActivity=".ui.activity.MainActivity">--><!--            <intent-filter>--><!--                <action android:name="android.intent.action.MAIN" />--><!--                <category android:name="android.intent.category.LAUNCHER" />--><!--            </intent-filter>--><!--        </activity-alias>--><activityandroid:name=".ui.activity.LauncherActivityNew"android:enabled="false"android:exported="true"android:icon="@mipmap/ic_launcher_mid_autumn_festival"android:label="@string/app_name2"android:targetActivity=".ui.activity.MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name=".ui.activity.MainActivity"android:launchMode="standard"android:screenOrientation="portrait" /><activityandroid:name=".ui.activity.SettingActivity"android:launchMode="standard"android:screenOrientation="portrait" /></application></manifest>

注意:
在这里插入图片描述

3.2 activity_launcher.xml代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".ui.activity.LauncherActivity"><TextViewandroid:id="@+id/tvSetLogo"android:layout_width="match_parent"android:layout_height="50dp"android:layout_margin="16dp"android:background="@color/black"android:gravity="center"android:text="启动页"android:textColor="@color/white"android:textSize="20sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>
3.3 LauncherActivity.kt代码
package com.example.test.ui.activityimport android.content.ComponentName
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.test.R
import com.example.test.utils.LogUtilopen class LauncherActivity : AppCompatActivity() {private lateinit var mPackageManager: PackageManageroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)
//        enableEdgeToEdge()setContentView(R.layout.activity_launcher)
//        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
//            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
//            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
//            insets
//        }//        LogUtil.i("获取到的路径 simpleName:${ LunchActivity::class.java.simpleName}")
//        LogUtil.i("获取到的路径 packageName:${ LunchActivity::class.java.`package`.name}")
//        LogUtil.i("获取到的路径 name:${ LunchActivity::class.java.name}")/*获取到的路径 simpleName:LunchActivity获取到的路径 packageName:com.example.test.ui.activity获取到的路径 name:com.example.test.ui.activity.LunchActivity*/initData()initView()initEvent()if (this::class.java.simpleName.equals(LauncherActivityNew::class.java.simpleName)) {LogUtil.i("没有 执行 updateLauncherIcon")startActivity(Intent(this, MainActivity::class.java))finish()} else {updateLauncherIcon()}}private fun initData() {mPackageManager = applicationContext.packageManager}private fun initView() {}private fun initEvent() {}private fun updateLauncherIcon() {LogUtil.i("执行了 updateLauncherIcon")
//            var festervalIcon = ComponentName(baseContext, "com.example.test.ui.activity.LunchActivity")var festervalIcon = ComponentName(baseContext, LauncherActivityNew::class.java.name)enableComponent(festervalIcon)disableComponent(componentName)startMainActivity()}/*PackageManager.DONT_KILL_APPPackageManager.SYNCHRONOUS*///启用组件private fun enableComponent(componentName: ComponentName) {mPackageManager.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP)}//隐藏组件private fun disableComponent(componentName: ComponentName) {mPackageManager.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)}private fun startMainActivity() {val intent = Intent(this, MainActivity::class.java)intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)this.startActivity(intent)finish()}
}

在这里插入图片描述

在这里插入图片描述

3.4 LauncherActivityNew.kt代码
class LauncherActivityNew : LauncherActivity() {
}
3.5 activity_main.xml代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".ui.activity.LauncherActivity"><TextViewandroid:id="@+id/tvSetLogo"android:layout_width="match_parent"android:layout_height="50dp"android:layout_margin="16dp"android:background="@color/black"android:gravity="center"android:text="打开设置页面"android:textColor="@color/white"android:textSize="20sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>
3.6 MainActivity.kt代码
package com.example.test.ui.activityimport android.content.Intent
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.example.test.Rclass MainActivity : AppCompatActivity(R.layout.activity_main) {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)findViewById<TextView>(R.id.tvSetLogo).setOnClickListener {startActivity(Intent(this,SettingActivity::class.java))}}
}
3.7 activity_setting.xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="50dp"android:layout_gravity="center"android:gravity="center"android:text="设置"android:textColor="@color/black"android:textSize="20sp" /></LinearLayout>
3.8 SettingActivity.kt代码
package com.example.test.ui.activityimport android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.test.Rclass SettingActivity: AppCompatActivity(R.layout.activity_setting) {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)}
}

相关文章:

Android:动态更新app启动图标和应用名

一、需求背景 每逢重要佳节&#xff0c;很多应用启动图标会自动更新为对应佳节的图标&#xff0c;应用无需更新。 二、效果图 更新后的启动图标和应用名称 三、实现流程 Android app只能替换内置的icon&#xff0c;因此需要提前将logo图标放入App资源文件件里 实际项目App更新…...

深入探讨 ElementUI 动态渲染 el-table

在前端开发中&#xff0c;表格是不可或缺的一部分。无论是数据展示、数据录入&#xff0c;还是数据分析&#xff0c;表格都扮演着重要的角色。而在 Vue.js 生态系统中&#xff0c;ElementUI 提供了一个强大且灵活的表格组件——el-table。本文将带你深入了解如何使用 ElementUI…...

数据炼金术:用Python爬虫精炼信息

标题&#xff1a;数据炼金术&#xff1a;用Python爬虫精炼信息 在数据泛滥的互联网时代&#xff0c;Python爬虫不仅是搜集信息的利器&#xff0c;更是清洗和格式化数据的炼金术。本文将带你走进数据清洗和格式化的世界&#xff0c;展示如何使用Python爬虫从海量网络信息中提取…...

C++第三十八弹---一万六千字使用红黑树封装set和map

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、set/map基本结构 2、红黑树基本结构改造 3、红黑树的迭代器 4、set的模拟实现 5、map的模拟实现 6、完整代码 1、set/map基本结构 在封装…...

★ C++基础篇 ★ vector 类

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C基础篇第六章----vector类 ~ 目录 一 vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 1.2.1 vector的定义 1.2.2 vector iterator 的使用 1.2.3 vector 空间增长问题 1.2.4 vecto…...

原生js用Export2Excel导出excel单级表头和多级表头数据方式实现

原生js用Export2Excel导出excel单级表头和多级表头数据方式实现 原生js用Export2Excel导出excel单级表头和多级表头数据方式实现HTML文件导入需要的文件HTML文件中实现导出函数HTML总代码实现汇总&#xff08;直接复制代码&#xff0c;注意js引入路径&#xff09; 原生js用Expo…...

急需翻译PDF文件怎么办?pdf翻译在线快速帮你解决

面对满屏幕密密麻麻的pdf文件&#xff0c;我常常感到头疼&#xff01; 语言障碍让我在获取信息的道路上踌躇不前&#xff0c;但自从我发现了pdf在线翻译成中文的神奇工具&#xff0c;一切问题似乎都迎刃而解。 这些软件不仅让我能够快速跨过语言壁垒&#xff0c;还让我在学术…...

线程安全的集合类和并发数据结构

在Java中&#xff0c;线程安全的集合类和并发数据结构对于处理多线程环境下的数据共享和同步至关重要。这些集合和数据结构通过不同的机制来确保在多线程环境下数据的一致性和完整性。以下是一些常见的线程安全的集合类和并发数据结构&#xff1a; 线程安全的集合类 Vector 描…...

Linux环境下运行介绍

1. 文件编程函数介绍 如果在Linux系统下学习C语言&#xff0c;就会了解到两套文件编程接口函数&#xff1a; C语言标准的文件编程函数: fopen、fread、fwrite、fclose Linux下提供的文件编程函数: open、read、write、close 传参的区别: 基于文件指针: fopen fclose fread…...

Adobe Media Encoder ME 2023-23.6.6.2 解锁版下载安装教程 (专业的视频和音频编码渲染工具)

前言 Adobe Media Encoder&#xff08;简称Me&#xff09;是一款专业的音视频格式转码软件&#xff0c;文件格式转换软件。主要用来对音频和视频文件进行编码转换&#xff0c;支持格式非常多&#xff0c;使用系统预设设置&#xff0c;能更好的导出与相关设备兼容的文件。 一、…...

在go语言里io.EOF怎么理解呢?

Go语言在处理文件和其他I/O流时&#xff0c;会使用io.EOF常量来表示文件结束&#xff08;End Of File&#xff09;的情况。 io.EOF是Go标准库中io包定义的一个错误值&#xff0c;用于在读取操作达到文件末尾时返回。它是处理文件读取和I/O操作时常见的错误类型之一。当读取操作…...

日常编码工作与提升式学习两不误

在快速迭代的编程世界中&#xff0c;程序员们不仅需要高效完成日常编码任务&#xff0c;还需不断学习新技术、深化专业知识&#xff0c;以应对日益复杂的项目挑战。然而&#xff0c;如何在繁忙琐碎的编码工作与个人成长之间找到平衡&#xff0c;是不少程序员都面临的一个难题。…...

推荐被Stars5.8k的Java框架RuoYi

一直想做一款后台管理系统&#xff0c;看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序&#xff0c;如网站管理后台&#xff0c;网站会员中心&#xff0c;CMS&#xff0c;CRM&#xff0c…...

聊聊适配器模式

目录 适配器模式概念 主要实现方式 主要组成 UML用例图 代码示例 生活场景 应用场景 适配器模式概念 适配器模式属于结构型设计模式&#xff0c;它的主要目的是将一个类的接口转换成客户端所期望的另一种接口形式&#xff0c;使得原本接口不兼容的类可以一起工作。 主…...

韩国服务器的性能如何提升

韩国服务器的性能可以通过硬件升级、网络优化、缓存优化和软件优化来提升。具体方法如下&#xff0c;rak小编为您整理发布韩国服务器的性能如何提升。 1. 硬件升级 CPU升级&#xff1a;选择高性能的多核处理器&#xff0c;可以显著提升计算速度和响应能力。 内存升级&#xff1…...

体育器材管理系统的设计与实现---附源码 76709

摘 要 本文介绍了一种基于Spring Boot框架的体育器材管理系统&#xff0c;该系统旨在优化学校或教育机构对体育器材的管理流程。通过集成Spring Boot、MySQL、MyBatis以及前端HTML、CSS、JavaScript等技术&#xff0c;实现了器材信息的录入、查询、修改&#xff0c;器材的借用…...

ArcEngine提取面要素公共边的实现方法

1、前言 很久没写ArcEngine的内容了&#xff0c;正好这次有同志提了一个问题&#xff1a;如何用ArcEngine实现批量提取面要素之间的公共边&#xff1f;捣鼓了半天总算是解决了&#xff0c;下面就来说一说解决思路。 2、ArcMap的实现方法 首先准备一份测试数据&#xff0c;如…...

高可用集群keepalived 原理+实战

keepalived 1.高可用集群1.1简介1.2原理1.3 集群类型1.4实现高可用1.5VRRP&#xff1a;Virtual Router Redundancy Protocol1.5.1 VRRP 相关术语1.5.2VRRP 相关技术 2.实验2.1keepalived环境部署2.2抢占模式和非抢占模式2.2.1非抢占模式2.2.2抢占延迟模式 preempt_delay 2.3VIP…...

保姆级教程,带你复现病理AI的经典模型CLAM(一)|项目复现·24-08-19

小罗碎碎念 推文概述 复现CLAM的第一期推文 通过这期推文你首先会学会如何在服务器端使用jupyter编程&#xff0c;比你用其他的编译器&#xff08;例如PyCharm、VS&#xff09;会更加的清晰&#xff0c;对新手也更友好。 接着我会介绍如何进行数据预处理&#xff0c;以及你应…...

数据可视化之旅,从数据洞察到图表呈现,可视化的产品设计

图表作为数据可视化的重要工具&#xff0c;是对原始数据进行深度加工与解读的有效手段&#xff0c;它助力我们洞悉数据背后的真相&#xff0c;使我们能更好地适应这个由数据驱动的世界。无论是工作汇报、项目实施、产品设计、后台界面还是数据大屏展示&#xff0c;图表都扮演着…...

ArrayList 和 LinkedList 的区别是什么

数据结构实现&#xff1a;ArrayList 是动态数组的数据结构实现&#xff0c;而 LinkedList 是双向链表的数据结构实现。随机访问效率&#xff1a;ArrayList 比 LinkedList 在随机访问的时候效率要高&#xff0c;因为 LinkedList 是线性的数据存储方式&#xff0c;所以需要移动指…...

在Matlab中进行射频电路S、Z、Y、ABCD等参数的转换

在Matlab中进行射频电路S、Z、Y、ABCD等参数的转换 目录 在Matlab中进行射频电路S、Z、Y、ABCD等参数的转换1、转换案例-3dB电桥2、将转换结果应用到ADS中制造理想3dB电桥器件 在微带线的ABCD矩阵的推导、转换与级联-Matlab计算实例&#xff08;S、Z、Y参数转换&#xff09;中&…...

渗透实战——为喜欢的游戏“排忧解难”

本文仅用于技术研究学习&#xff0c;请遵守相关法律&#xff0c;禁止使用本文所提及的相关技术开展非法攻击行为&#xff0c;由于传播、利用本文所提供的信息而造成任何不良后果及损失&#xff0c;与本账号及作者无关。 资料查询来源- 安全社区与AI模型结合探索【文末申请免费…...

政务大数据解决方案(十)

政务大数据解决方案通过建立全面的集成数据平台&#xff0c;整合来自各政府部门的异构数据&#xff0c;运用大数据分析、人工智能和机器学习技术对数据进行深度挖掘与智能化处理&#xff0c;提供实时精准的决策支持&#xff0c;从而提升政策制定和实施的科学性与效率。该方案包…...

使用WebStorm进行高效的全栈JavaScript开发

使用WebStorm进行高效的全栈JavaScript开发&#xff0c;是一个涉及多方面技能与工具利用的过程。WebStorm&#xff0c;作为JetBrains公司推出的一款专为前端开发者和全栈工程师设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;以其强大的功能、卓越的性能和友好的用…...

数据导入导出(EasyExcel)框架入门指南

写在前面 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 文章目录 EasyExcel 框架概述依赖APIExcel 实体类注解写 Excel概念介绍写 Excel 通用参数WriteWorkbookWriteSheetWriteTable 代码…...

Ubuntu如何实现每天定时关机

要在Ubuntu中实现每天定时关机&#xff0c;你可以使用cron来安排定时任务。以下是具体的步骤&#xff1a; 步骤 1: 创建脚本 打开终端。使用文本编辑器创建一个新的文件。例如&#xff1a; nano ~/shutdown_script.sh 步骤 2: 编写脚本 在编辑器中输入以下内容&#xff1a…...

【MySQL进阶】事务、存储引擎、索引、SQL优化、锁

一、事务 1.概念 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向 系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 例子&#xff1a;转账&#xff0c;要求扣钱和进账…...

BeanDefinitionOverrideException产生原因及解决方案

BeanDefinitionOverrideException 是 Spring 框架中与依赖注入&#xff08;Dependency Injection&#xff09;相关的异常。它通常在 Spring 应用程序启动时抛出&#xff0c;当 Spring 在加载应用程序上下文时&#xff0c;检测到有多个相同名称的 Bean 定义被加载&#xff0c;并…...

配置Prettier+Vscode setting提高前端开发效率

前言 大家好&#xff0c;上一篇一文读懂 系列的文章中我们介绍了前端的代码格式化校验工具ESLient。代码格式是进行自动校验了&#xff0c;但你还要一个个的微调&#xff0c;很麻烦不是吗&#xff1f; 本文介绍和ESLient配合使用的Prettier实现编译器自动将代码格式化。 同时也…...

系统架构师计算题(1)——计算机系统基础知识(上)

持续刷题,持续总结,持续更新! 目录 1. 文件系统 题型1:多级索引 2. 存储管理 题型1:页式存储 题型2:段式存储 题型3:段页式存储 3. 磁盘读取 题型1:访问耗时 4. RAID 题型1:计算容量 1. 文件系统 文件在系统中的存储结构有如下几种: (1) 连续结构。 连续结构…...

2024/8/18周报

文章目录 摘要Abstract蚁群算法背景基本步骤应用TSP问题蚁群算法具体实现 遗传算法基本原理主要步骤遗传算法的主要组件遗传算法的应用遗传算法的优点遗传算法的局限性示例代码 多目标优化算法多目标优化的基本概念多目标优化算法的分类NSGA-II 算法示例 总结 摘要 本周对项目…...

端点安全新纪元:EDR与XDR技术的融合应用

在数字时代&#xff0c;随着网络威胁的日益复杂化和多样化&#xff0c;端点安全成为了企业组织不可或缺的重要防线。传统的防病毒软件和防火墙等安全解决方案已难以满足当前的安全需求&#xff0c;而EDR&#xff08;端点检测与响应&#xff09;和XDR&#xff08;扩展检测与响应…...

机器学习:多元线性回归模型

目录 前言 一、讲在前面 1.多元_血压.csv&#xff1a; 2.完整代码&#xff1a; 3.运行结果&#xff1a; 二、实现步骤 1.导入库 2.导入数据 3.绘制散点图&#xff08;这步可以省略&#xff09; ​编辑 4.求特征和标签的相关系数 5.建立并训练线性回归模型 6.检验模…...

树莓派5环境配置笔记 新建虚拟python环境—安装第三方库—配置Thonny解释器

树莓派5虚拟环境配及第三方库的安装&#x1f680; 在完成了树莓派的系统下载和各项基础配置之后进入到了&#xff0c;传感器开发部分&#xff0c;在测试传感器开发之前我打算先安装一下自己需要的库&#xff0c;但是在我直接在系统的根目录下运行pip命令的时候总会报环境错误&a…...

浅谈Winform

一、Winform简介说明 C# 是一种面向对象的编程语言&#xff0c;由微软开发并作为.NET框架的主要编程语言。C# 设计时考虑了易用性&#xff0c;并且具有丰富的特性&#xff0c;如垃圾回收、异常处理、泛型、LINQ&#xff08;Language Integrated Query&#xff09;、异步编程等。…...

MySQL(二)——CRUD

文章目录 CRUD新增全列插入指定列插入插入查询结果 查询全列查询指定列查询查询字段为表达式表达式不包含字段表达式包含一个字段表达式包含多个字段 补充&#xff1a;别名去重查询排序条件查询 补充&#xff1a;运算符区间查询模糊查询NULL的查询 分页查询聚合查询聚合函数 分…...

presto高级用法(grouping、grouping sets)

目录 准备工作&#xff1a; 在hive中建表 在presto中计算 分解式 按照城市分组 统计人数 按照性别分组 统计人数 ​编辑 按照爱好分组 统计人数 ​编辑 按照城市和性别分组 统计人数 按照城市和爱好分组 统计人数 按照性别和爱好分组 统计人数 按照城市和性别还有…...

二十五年后,Microsoft终于移除了FAT32的32GB分区限制——一个从草稿到现实的故事

二十五年后&#xff0c;Microsoft终于移除了FAT32的32GB分区限制——一个从草稿到现实的故事 你可能不知道&#xff0c;FAT32文件系统的32GB分区限制是怎么来的。这个限制其实是1994年Windows前开发者Dave Plummer无心插柳的结果&#xff0c;也是"草台班子"式开发的…...

Java二十三种设计模式-命令模式(18/23)

命令模式&#xff1a;将请求封装为对象的策略 概要 本文全面探讨了命令模式&#xff0c;从基础概念到实现细节&#xff0c;再到使用场景、优缺点分析&#xff0c;以及与其他设计模式的比较&#xff0c;并提供了最佳实践和替代方案&#xff0c;旨在帮助读者深入理解命令模式并…...

Kafka系列之:Dead Letter Queue死信队列DLQ

Kafka系列之:Dead Letter Queue死信队列DLQ 一、死信队列二、参数errors.tolerance三、创建死信队列主题四、在启用安全性的情况下使用死信队列更多内容请阅读博主这篇博客: Kafka系列之:Kafka Connect深入探讨 - 错误处理和死信队列一、死信队列 死信队列(DLQ)仅适用于接…...

Fragment学习笔记

静态加载 <fragment android:name"com.example.serviceapplication.fragment.TestFragment"android:layout_width"match_parent"android:layout_height"wrap_content"app:layout_constraintStart_toStartOf"parent"app:layout_cons…...

NGINX 基础参数与功能

章节 1 NGINX 的源码安装 2 NGINX 核心配置详解 3 NGINX 之 location 匹配优先级 4 NGINX 基础参数与功能 目录 1 实现 Nginx 账户认证功能 1.1 创建htpasswd 认证文件 1.2 创建数据目录 1.3 指定认证文件路径 1.4 测试效果 2 定义重定向错误日志 2.1 指定错误日志访问路…...

css设置元素居中显示

CSS中实现居中显示可以通过不同的属性来实现&#xff0c;取决于你是要水平居中还是垂直居中&#xff0c;或者两者都要。以下是一些常用的居中方法&#xff1a; 1.水平居中 - 行内元素或文本 .center-text {text-align: center; } 2.水平居中 - 块级元素 .center-block {mar…...

js判断一个任意值为空包括数组和对象

在JavaScript中&#xff0c;判断一个变量是否为空可以考虑以下几种情况&#xff1a; 如果变量可能是null或undefined&#xff0c;可以直接判断。 对于数组&#xff0c;如果想要判断数组为空&#xff08;长度为0&#xff09;&#xff0c;可以检查其length属性。 对于对象&…...

EmguCV学习笔记 VB.Net和C# 下的OpenCv开发

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 笔者的博客网址&#xff1a;https://blog.csdn.net/uruseibest 本教程将分为VB.Net和C#两个版本分别进行发布。 教程VB.net版本请…...

“TCP粘包”不是TCP的问题!

前言 写RPC用了Netty。涉及到粘包拆包问题。想复习一下。发现网上博客多是概念模糊不清。没有触及本质或者没有讲清楚。 遂决定自己写一篇 “TCP粘包”是谁的问题&#xff1f; 首先我们要明确TCP是面向字节流的协议。也就是说我们在应用层想使用TCP来传输数据时&#xff0c;…...

Electron项目依赖管理:最佳实践与常见错误

问题一 问题描述: 输入命令 pnpm add electron 后&#xff0c; electron 包在执行 postinstall 脚本时&#xff0c;尝试从网络上下载 Electron 二进制文件&#xff0c;但由于网络问题&#xff08;如连接超时或代理设置问题&#xff09;&#xff0c;导致下载失败。 λ pnpm a…...

华为数通路由交换HCIP/HCNP

2017-2022年软考高级网络规划设计师真题解析视频&#xff01;软考复习一定要多做历年真题&#xff01; 2022年软考网络规划设计师真题解析_哔哩哔哩_bilibili 2024年5月软考网络工程师真题解析合集&#xff0c;考后估分版【综合知识案例分析】 2024年5月软考网络工程师真题解…...

搜索面试题

1、目前怎么构建样本的&#xff1f;如果排序中第5个被点了&#xff0c;前面的作为负样本&#xff0c;后面的不要怎么样&#xff1b;为什么不好&#xff0c;为什么好。 点击作为负样本&#xff0c;曝光未点击作为负样本&#xff1b; 可以这样理解。您提到的排序中第5个被点的对…...