Android开发四大组件和生命周期及setFlags
文章目录
- Android开发四大组件
- 1. Activity(活动)
- 2. Service(服务)
- 3. BroadcastReceiver(广播接收器)
- 4. ContentProvider(内容提供者)
- 共同特点
- Activity 生命周期详解
- 完整的生命周期方法
- 特殊情况生命周期方法
- 生命周期图示
- 常见场景的生命周期变化
- Intent的setFlags(int flags)方法详解
- 常用标志(Flags)分类
- 1. 任务栈控制标志
- FLAG_ACTIVITY_NEW_TASK (0x10000000)
- FLAG_ACTIVITY_CLEAR_TASK (0x00008000)
- FLAG_ACTIVITY_CLEAR_TOP (0x04000000)
- 2. Activity 实例管理标志
- FLAG_ACTIVITY_SINGLE_TOP (0x20000000)
- FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS (0x00800000)
- 3. 任务栈历史管理标志
- FLAG_ACTIVITY_NO_HISTORY (0x40000000)
- FLAG_ACTIVITY_REORDER_TO_FRONT (0x00020000)
- 4. 其他常用标志
- FLAG_ACTIVITY_NO_ANIMATION (0x00010000)
- FLAG_ACTIVITY_MULTIPLE_TASK (0x08000000)
- 组合使用示例
- 注意事项
Android开发四大组件
Android四大组件是Android应用开发的基础架构,包括:
1. Activity(活动)
- 作用:用户交互界面
- 特点:
- 提供可视化用户界面
- 一个应用通常由多个Activity组成
- 通过Intent进行跳转
- 生命周期:onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()
2. Service(服务)
- 作用:后台运行组件
- 特点:
- 无用户界面
- 可用于长时间运行操作(如下载、播放音乐)
- 分为启动状态和绑定状态
- 类型:
- Started Service(启动服务)
- Bound Service(绑定服务)
3. BroadcastReceiver(广播接收器)
- 作用:接收系统或应用广播消息
- 特点:
- 用于响应系统级事件(如电量低、网络变化)
- 可以静态注册(Manifest)或动态注册(代码)
- 通过IntentFilter指定接收的广播类型
4. ContentProvider(内容提供者)
- 作用:数据共享组件
- 特点:
- 管理结构化数据共享
- 提供统一接口访问数据
- 通过URI标识数据
- 常用于应用间数据共享
共同特点
- 都需要在AndroidManifest.xml中声明
- 都可以通过Intent进行激活或通信
- 都有各自的生命周期
这些组件构成了Android应用的基本框架,开发者通过组合使用这些组件来构建功能丰富的应用程序。
Activity 生命周期详解
Activity 生命周期是 Android 开发中最重要的概念之一,它描述了 Activity 从创建到销毁的整个过程。理解生命周期对于正确处理资源管理、数据保存和用户体验至关重要。
完整的生命周期方法
-
onCreate()
- Activity 首次创建时调用
- 必须实现的方法,用于初始化基本组件
- 应该在此处调用
setContentView()
设置布局 - 接收
savedInstanceState
参数(可能为 null)
-
onStart()
- Activity 变为可见状态时调用
- 此时 Activity 还未出现在前台,不能与用户交互
- 适合初始化需要在 Activity 可见时运行的组件
-
onResume()
- Activity 进入前台并可与用户交互时调用
- 在此方法中恢复动画、摄像头等独占资源
- 应用的核心功能通常在此状态下运行
-
onPause()
- 当 Activity 开始失去焦点时调用
- 另一个 Activity 即将进入前台(如对话框或新 Activity)
- 应该在此保存持久性数据,停止动画等消耗资源操作
- 注意:不能执行耗时操作,否则会影响新 Activity 的显示
-
onStop()
- Activity 完全不可见时调用
- 新 Activity 已完全覆盖当前 Activity
- 释放不需要在 Activity 不可见时使用的资源
-
onDestroy()
- Activity 被销毁前调用
- 可能是用户主动关闭或系统为回收内存
- 清理所有资源,避免内存泄漏
-
onRestart()
- Activity 从停止状态重新启动时调用
- 在
onStop()
后且 Activity 再次显示前调用
特殊情况生命周期方法
-
onSaveInstanceState(Bundle outState)
- 在 Activity 可能被销毁前调用(如屏幕旋转)
- 用于保存临时状态到 Bundle 对象
- 数据会在
onCreate()
或onRestoreInstanceState()
中恢复
-
onRestoreInstanceState(Bundle savedInstanceState)
- 在
onStart()
之后调用 - 恢复之前通过
onSaveInstanceState()
保存的状态
- 在
生命周期图示
启动Activity → onCreate() → onStart() → onResume() → Activity运行中↑ ↓ onPause() ← ↓ onStop() ←| → onRestart() → onStart()└─────── onDestroy()
常见场景的生命周期变化
-
正常启动和退出
- onCreate() → onStart() → onResume()
- onPause() → onStop() → onDestroy()
-
按下Home键
- onPause() → onStop()
-
从后台返回
- onRestart() → onStart() → onResume()
-
屏幕旋转
- onPause() → onSaveInstanceState() → onStop() → onDestroy()
- onCreate() → onStart() → onRestoreInstanceState() → onResume()
理解并正确管理 Activity 生命周期是开发稳定、高效 Android 应用的基础。
Intent的setFlags(int flags)方法详解
Intent.setFlags(int flags)
是 Android 中用于控制 Activity 启动行为的重要方法,它通过设置各种标志(flags)来影响 Activity 的任务栈(Task)和启动模式。
常用标志(Flags)分类
1. 任务栈控制标志
FLAG_ACTIVITY_NEW_TASK (0x10000000)
- 作用:在新任务中启动 Activity
- 使用场景:
- 从 Service 或 BroadcastReceiver 启动 Activity 时必须使用
- 创建独立的任务栈
- 注意:如果已有该 Activity 的实例存在,会将该实例带到前台
FLAG_ACTIVITY_CLEAR_TASK (0x00008000)
- 作用:清除现有任务栈中的所有 Activity
- 配合使用:通常与 FLAG_ACTIVITY_NEW_TASK 一起使用
- 效果:新 Activity 将成为任务栈中唯一的 Activity
FLAG_ACTIVITY_CLEAR_TOP (0x04000000)
- 作用:如果目标 Activity 已在栈中,则清除它上面的所有 Activity
- 行为:
- 如果目标 Activity 在栈顶:直接使用现有实例
- 如果目标 Activity 在栈中但不在栈顶:销毁它上面的所有 Activity
- 常见用途:返回应用主界面
2. Activity 实例管理标志
FLAG_ACTIVITY_SINGLE_TOP (0x20000000)
- 作用:相当于 launchMode=“singleTop”
- 行为:如果目标 Activity 已在栈顶,则不会创建新实例,而是调用其
onNewIntent()
- 使用场景:防止重复创建相同的 Activity(如通知点击)
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS (0x00800000)
- 作用:Activity 不会出现在最近任务列表中
- 使用场景:敏感页面或临时页面
3. 任务栈历史管理标志
FLAG_ACTIVITY_NO_HISTORY (0x40000000)
- 作用:Activity 不会保留在任务栈中
- 行为:用户离开后,该 Activity 会被立即销毁
- 使用场景:临时中间页面(如登录页面)
FLAG_ACTIVITY_REORDER_TO_FRONT (0x00020000)
- 作用:如果 Activity 已在任务栈中,则将其移到栈顶而不创建新实例
- 行为:调用现有实例的
onNewIntent()
- 使用场景:重新激活已存在的 Activity
4. 其他常用标志
FLAG_ACTIVITY_NO_ANIMATION (0x00010000)
- 作用:禁用 Activity 切换动画
- 使用场景:需要无动画过渡时
FLAG_ACTIVITY_MULTIPLE_TASK (0x08000000)
- 作用:总是创建新任务,即使已有相同任务存在
- 配合使用:必须与 FLAG_ACTIVITY_NEW_TASK 一起使用
组合使用示例
// 示例1:清除整个任务栈并启动新的主Activity
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);// 示例2:单例模式启动Activity(如果已存在则调到前台)
Intent intent = new Intent(this, DetailActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);// 示例3:防止重复创建相同的Activity(类似singleTop)
Intent intent = new Intent(this, NotificationActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
注意事项
- 标志可以通过
|
运算符组合使用 - 某些标志需要特定组合才能生效(如 FLAG_ACTIVITY_NEW_TASK)
- 这些标志会覆盖 Manifest 中设置的 launchMode
- 在 Android 5.0+ 中,任务栈行为有部分变化,需注意兼容性
- 过度使用标志可能导致任务栈管理混乱,应谨慎使用
理解这些标志对于控制应用导航流程和任务栈行为非常重要,合理使用可以创建更符合预期的用户体验。
相关文章:
Android开发四大组件和生命周期及setFlags
文章目录 Android开发四大组件1. Activity(活动)2. Service(服务)3. BroadcastReceiver(广播接收器)4. ContentProvider(内容提供者)共同特点 Activity 生命周期详解完整的生命周期方…...
mysql的函数(第二期)
九、窗口函数(MySQL 8.0) 适用于对结果集的子集(窗口)进行计算,常用于数据分析场景。 ROW_NUMBER() 作用:为每一行生成唯一的序号。示例:按分数降序排名 SELECT n…...
MATLAB 控制系统设计与仿真 - 39
多变量系统控制器设计实例2 假如原系统对象中有位于虚轴上的极点,则不能直接应用鲁棒控制设计来设计控制器。 在这样的情况下,需引入一个新的变量p,使得 即可在对象模型中用p变量取代s变量,这样的变换称为双线性变换,…...
深入理解C++ 中的vector容器
一、引言 在C 的标准模板库(STL)中, vector 是一个极为常用且功能强大的序列容器。它就像是一个动态数组,既能享受数组随机访问元素的高效性,又能灵活地动态调整大小。在本文中,我们将深入探讨 vector …...
ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(显示输出类外设之LED)
目录 ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(显示输出类外设之LED)简介模块概述功能定义架构位置核心特性 LED外设分析LED外设概述LED外设功能特点常见应用场景LED外设架构图 LED外设API和数据结构公共API事件类型配置…...
[特殊字符] Kotlin与C的类型别名终极对决:typealias vs typedef,如何让代码脱胎换骨?
在 Kotlin 中,typealias 是一个非常实用的关键字,它可以为已有的类型定义一个新的名称,起到简化代码和提升可读性的作用。比如: // 定义一个复杂函数类型的别名 typealias ClickListener (View, Int) -> Unitfun setOnClickL…...
第9期:文本条件生成(CLIP + Diffusion)详解
“让我们用一句话,让模型画出一幅画。” 在前几期中我们学习了 Denoising Diffusion Probabilistic Models(DDPM)如何在无条件情况下生成图像。而在本期,我们将跨入更具挑战性但也更酷的领域 —— 文本条件图像生成(Te…...
8 编程笔记全攻略:Markdown 语法精讲、Typora 编辑器全指南(含安装激活、基础配置、快捷键详解、使用技巧)
1 妙笔在手,编程无忧! 1.1 编程为啥要做笔记?这答案绝了! 嘿,各位键盘魔法师!学编程不记笔记,就像吃火锅不配冰可乐 —— 爽到一半直接噎住!你以为自己脑子是顶配 SSD,结…...
C#测试linq中的左连接的基本用法
使用linq联表或者连接两个对象集合查询时一般使用的是join关键字,返回结果中包含两个表或两个对象集合中连接字段相等的数据记录,如果要实现sql语句中的左连接效果,并没有现成的left join关键字,此时可以使用DefaultIfEmpty 实现左…...
【Android面试八股文】Android系统架构【一】
Android系统架构图 1.1 安卓系统启动 1.设备加电后执行第一段代码:Bootloader 系统引导分三种模式:fastboot,recovery,normal: fastboot模式:用于工厂模式的刷机。在关机状态下,按返回开机 键进…...
什么是 Stream
Stream 是对集合对象功能的增强,它不是集合,也不存储数据,而是从集合中抽象出一条数据通道,让你可以用链式方式一步步处理数据。 🔧 常见操作分类 类型方法举例创建stream(), Stream.of(), Arrays.stream()中间操作fi…...
网络编程 - 4 ( TCP )
目录 TCP 流套接字编程 API 介绍 SeverSocket Socket 用 TCP 实现一个回显服务器 服务端 客户端 运行调试 第一个问题:PrintWriter 内置的缓冲区 - flush 刷新解决 第二个问题:上述代码中,需要进行 close 操作吗? 第三…...
在STM32的定时器外设中,选择使用哪个外部时钟配置函数
在STM32的定时器外设中,选择使用哪个外部时钟配置函数主要取决于以下几个因素: 时钟源类型: TIM_ITRxExternalClockConfig:使用内部触发输入(ITRx),即来自其他定时器的时钟信号 TIM_TIxExternalClockConfig࿱…...
【Tauri2】026——Tauri+Webassembly
前言 不多废话 直言的说,笔者看到这篇文章大佬的文章 【04】Tauri 入门篇 - 集成 WebAssembly - 知乎https://zhuanlan.zhihu.com/p/533025312尝试集成一下WebAssembly,直接开始 正文 准备工作 新建一个项目 安装 vite的rsw插件和rsw pnpm instal…...
jenkins尾随命令
在访问jenkins的网址后面可以追加命令,比如访问地址是 http://10.20.0.124:8080/,常用的有以下几种方式: 1.关闭Jenkins 只要浏览器输入http://10.20.0.124:8080/exit即可退出,或者http://localhost:8080/exit 2.重启Jenkins …...
基于机器学习 LSTM 算法的豆瓣评论情感分析系统
基于机器学习 LSTM 算法的豆瓣评论情感分析系统 博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 ὄ…...
腾讯云对象存储m3u8文件使用腾讯播放器播放
参考腾讯云官方文档: 播放器 SDK Demo 体验_腾讯云 重要的一步来了: 登录腾讯云控制台,找到对象存储的存储桶。 此时,再去刷新刚才创建的播放器html文件,即可看到播放画面了。...
基于chatgpt和deepseek解答显卡的回答
当然可以!了解显卡特别是英伟达(NVIDIA)的系列,对于选购、升级或者了解游戏和创作性能都很重要。下面我帮你系统整理一下 NVIDIA 显卡的各个系列,并加点选购建议,方便你快速上手。 chatgpt 🧠 …...
2025年渗透测试面试题总结-拷打题库06(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 1. Sleep被禁用后的SQL注入 2. XSS属性控制利用 3. CSRF防护 4. 危险请求头 5. XXE高发场景 6. Ja…...
【一起学Rust】使用Thunk工具链实现Rust应用对Windows XP/7的兼容性适配实战
前言 在Rust语言快速发展的今天,开发者经常面临将现代语言特性与遗留系统兼容的挑战。特别是在工业控制、嵌入式设备等场景中,Windows XP/7等经典操作系统仍占据重要地位。本文深入解析如何通过Thunk工具链突破Rust编译器对旧版Windows系统的兼容性限制…...
leetcode 674. Longest Continuous Increasing Subsequence
目录 题目描述 第一步,明确并理解dp数组及下标的含义 第二步,分析明确并理解递推公式 第三步,理解dp数组如何初始化 第四步,理解遍历顺序 代码 题目描述 这是动态规划解决子序列问题的例子。与第300题的唯一区别就是&#…...
在VMware Workstation 17 Pro上实现Windows与UOS虚拟机之间复制粘贴文本及文件
在VMware Workstation 17 Pro上实现Windows与UOS虚拟机之间复制粘贴文本及文件 在本教程中,我们将介绍如何在VMware Workstation 17 Pro中安装UOS虚拟机,并通过安装open-vm-tools-desktop软件来实现Windows和UOS系统之间的文本和文件复制粘贴功能。 1.…...
十一、数据库day03--SQL语句02
文章目录 一、查询语句1. 基本查询2. 条件查询2.1 ⽐较运算符&逻辑运算符2.2 模糊查询2.3 范围查询2.4 判断空 3. 其他复杂查询3.1 排序3.2 聚合函数3.3 分组3.4 分页查询 二、回顾1. 使⽤ Navicat ⼯具中的命令列2.命令⾏基本操作步骤 提示:以下是本篇文章正文…...
第6章 类文件结构《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》
第6章 类文件结构 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。 6.1 概述 老师说过,计算机只认识0和1,所以我们写的程序需要被编译器翻译成由0和1构成的二进制格式才能被计算机…...
【Vue】模板语法与指令
个人主页:Guiat 归属专栏:Vue 文章目录 1. Vue 模板语法基础1.1 文本插值1.2 原始 HTML1.3 属性绑定 2. Vue 指令系统2.1 条件渲染2.2 列表渲染2.3 事件处理2.4 表单输入绑定 3. 计算属性与侦听器3.1 计算属性3.2 侦听器 4. 类与样式绑定4.1 绑定 HTML 类…...
Python语法系列博客 · 第5期[特殊字符] 模块与包的导入:构建更大的程序结构
上一期小练习解答(第4期回顾) ✅ 练习1:判断偶数函数 def is_even(num):return num % 2 0print(is_even(4)) # True print(is_even(5)) # False✅ 练习2:求平均值 def avg(*scores):return sum(scores) / len(scores)print(…...
HashMap 初步理解 put 操作流程 HashMap 的线程安全问题
一、HashMap 核心原理 HashMap 是 Java 中最常用的哈希表实现,基于 数组 链表/红黑树 的复合结构,核心特性如下: 哈希函数 键的哈希值通过 hashCode() 计算,并通过扰动函数优化分布:static final int hash(Object ke…...
服务治理-服务发现和负载均衡
第一步:引入依赖 第二步:配置地址 改写购物车服务的代码 负载均衡成功实现。 假如有一个服务挂了,比如说8081,cart-service能不能正常访问,感知到。 再重新启动8081端口。 不管服务宕机也好,还是服务刚启动…...
GNU,GDB,GCC,G++是什么?与其他编译器又有什么关系?
文章目录 前言1. GNU和他的工具1.1 gcc与g1.2 gdb 2.Windows的Mingw/MSVC3.LLVM的clang/clang4.Make/CMake 前言 在开始之前我们先放一段Hello World:hello.c #include <stdio.h>int main() {printf("Hello World");return 0; }然后就是一段老生常…...
定制一款国密浏览器(9):SM4 对称加密算法
上一章介绍了 SM3 算法的移植要点,本章介绍对称加密算法 SM4 的移植要点。 SM4 算法相对 SM3 算法来说复杂一些,但还是比较简单的算法,详细算法说明参考《GMT 0002-2012 SM4分组密码算法》这份文档。铜锁开源项目的实现代码在 sm4.c 文件中,直接拿过来编译就可以。 但需要…...
kafka集群认证
1、安装Kerberos(10.10.10.168) yum install krb5-server krb5-workstation krb5-libs -y 查看版本 klist -V Kerberos 5 version 1.20.1 编辑/etc/hosts 10.10.10.168 ms1 10.10.10.150 ms2 10.10.10.110 ms3 vim /etc/krb5.conf # Configuration snippets ma…...
Mermaid 是什么,为什么适合AI模型和markdown
什么是 Mermaid? Mermaid 是一个基于 JavaScript 的开源绘图和图表工具,允许用户通过简单的文本语法创建图表。它支持生成流程图、时序图、类图、甘特图等多种类型的可视化内容,并直接从类似 Markdown 的代码中渲染。Mermaid 因其与 Markdow…...
为什么信号完整性对于高速连接器设计至关重要?
外部连接器通过在各种电子元件和系统之间可靠地传输数据而不损失保真度来保持信号完整性。在本文中,我们将讨论信号完整性的重要性,回顾高速部署挑战,并重点介绍各种连接器设计策略,以防止失真和降级。 了解连接器信号完整性挑战…...
【FFmpeg从入门到精通】第三章-FFmpeg转封装
1 音视频文件转MP4格式 在互联网常见的格式中,跨平台最好的应该是MP4文件,因为MP4文件既可以在PC平台的 Flashplayer 中播放,又可以在移动平台的 Android、ios 等平台中进行播放,而且使用系统默认的播放器即可播放,因…...
PG数据库推进医疗AI向量搜索优化路径研究(2025年3月修订版)
PG数据库推进医疗AI向量搜索优化路径研究 一、医疗 AI 向量搜索的发展现状与挑战 1.1 医疗数据特征与检索需求 医疗数据作为推动医疗领域进步与创新的关键要素,具有鲜明且复杂的特征。从多模态角度看,医疗数据涵盖了结构化数据,如患者基本信息、检验检查报告中的数值结果;…...
Android 下拉栏中的禁用摄像头和麦克风隐藏
Android 下拉栏中的禁用摄像头和麦克风隐藏 文章目录 Android 下拉栏中的禁用摄像头和麦克风隐藏一、前言二、下拉框中的禁用摄像头和麦克风隐藏实现1、设置支持属性为false2、修改代码 三、其他1、下拉栏中的禁用摄像头和麦克风隐藏小结2、 Android SensorPrivacyService ps&a…...
阿里云Clickhouse 冷热数据分层存储 实战记录
一、 背景 某业务Clickhouse库月数据增长超过2.5T,云上Clickhouse容量并不是无限的,单节点有32T上限,而业务已使用一半以上,依此速度,半年内就将达到上限。 与业务讨论,大致有以下几种解决思路:…...
ARINC818-实现
1.编码和解码;分隔符插入和删除;空闲idle字符插入 2.视频TX和RX接口:可以设计为流传输和帧同步传输 3.传输媒介:光纤或者铜缆 4.链路支持fc 1x,2x,3x,5x,6x,8x 上图中N有限制,N不能允许ADVB帧负载和填充长度不超过2112…...
OpenStack Yoga版安装笔记(23)Swift安装
一、官方文档 Object Storage Install Guide — Swift 2.29.3.dev5 documentation 二、环境准备 之前的实验,已经有controller, compute1, block1节点,并已经完成Keystone、Glance、Nova、Neutron、Cinder等主要OpenStack Service的安装。 此处新增…...
MySql 三大日志(redolog、undolog、binlog)详解
:费解的开关
审题: 本题需要我们将多组测试用例中拉灯数小于等于6的最小拉灯数输出,若拉灯数最小值仍大于6,则输出-1 思路: 方法一:二进制枚举 首先我们先分析一下基本特性: 1.所有的灯不可能重复拉:若拉的数…...
2025.04.19-阿里淘天春招算法岗笔试-第三题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 数值平衡之道 问题描述 LYA 是一位精通树形数据结构的数学家,她有一棵包含 n n n...
单片机毕业设计选题物联网计算机电气电子类
题目一:基于单片机的PM2.5空气质量检测仪器 选 1.用到ADC0832模数转换芯片,数据更加精准。 2.使用夏普传感器的GP2Y1010AUOF粉尘传感器实时检测空气中的PM2.5值并通过1602显示出来,检测准确。 3.LCD1602液晶第一行 前面显示测到的PM2.5…...
TDOA解算——牛顿迭代法|以4个基站的三维空间下TDOA定位为背景,使用牛顿迭代法解算。附完整代码,订阅专栏后可复制粘贴
本问所介绍的代码通过TDOA(到达时间差)方法,结合牛顿迭代算法,实现了三维空间内目标位置的定位。系统包含1个主锚点和3个副锚点,通过测量信号到达各基站的时间差计算距离差,最终迭代求解目标坐标。订阅专栏后可以获得完整的MATLAB代码,粘贴到空脚本中即可运行 文章目录 …...
海量聊天数据处理:基于Spring Boot与SharingJDBC的分库分表策略及ClickHouse冷热数据分离
引言 随着互联网应用的快速发展,每天产生的聊天记录数量级已经达到了惊人的程度。以2000万条/天为例,一年下来就是大约7.3亿条记录。如此庞大的数据量给数据库的设计和管理带来了前所未有的挑战。本文将探讨如何使用SharingJDBC整合Spring Boot技术来实…...
网络开发基础(游戏)之 Socket API
Socket简介 Socket (套接字)是网络编程的基础,在 C# 中通过 System.Net.Sockets 命名空间提供了一套完整的 API 来实现网络通信。 网络上的两个程序通过一个双向的通信连接实现数据交换, 这个连接的一端称为一个Socket。 一个Socket包含了进行网络通信必…...
在 Amazon Graviton 上运行大语言模型:CPU 推理性能实测与调优指南
引言 在生成式 AI 浪潮中,GPU 常被视为大模型推理的唯一选择。然而,随着 ARM 架构的崛起和量化技术的成熟,CPU 推理的性价比逐渐凸显。本文基于 Amazon Graviton 系列实例与 llama.cpp 工具链,实测了 Llama 3、DeepSeek 等模型的…...
基于尚硅谷FreeRTOS视频笔记——15—系统配制文件说明与数据规范
目录 配置函数 INCLUDE函数 config函数 数据类型 命名规范 函数与宏 配置函数 官网上可以查找 最核心的就是 config和INCLUDE INCLUDE函数 这些就是裁剪的函数 它们使用一个ifndef。如果定义了,就如果定义了这个宏定义,那么代码就生效。 通过ifn…...
Nacos 使用了什么日志框架?如何配置和查看日志?
Nacos 使用的日志框架 Nacos 主要使用 SLF4j (Simple Logging Facade for Java) 作为日志门面(API),并选择 Logback 作为其底层的日志实现。 SLF4j: 这是一个日志抽象层,允许开发者在代码中使用统一的接口进行日志记录ÿ…...
【基于Fluent+Python耦合的热管理数字孪生系统开发:新能源产品开发的硬核技术实践】
引言:热管理数字孪生的技术革命 在新能源领域(如动力电池、储能系统、光伏逆变器等),热管理是决定产品性能与安全的核心问题。传统热设计依赖实验与仿真割裂的流程,而数字孪生技术通过实时数据驱动与动态建模…...