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

Kotlin FragmentTransaction多容器管理多个fragment

在Activity中管理五个Fragment的切换显示和隐藏,并且希望将这部分逻辑进行封装。之前已经教过他们如何在Kotlin中使用FragmentTransaction进行基本的添加、隐藏、显示和替换操作,现在需要进一步封装这些操作,提高代码的可维护性和复用性。

管理五个Fragment,可能需要在不同的情况下切换显示不同的Fragment,同时隐藏其他的。之前给出的例子是两个Fragment的情况,现在扩展到五个,需要考虑如何高效管理多个实例,避免重复创建和内存泄漏。

希望有个结构化的方式,将Fragment的管理逻辑集中起来,而不是在Activity中分散处理。可能需要一个工具类或者辅助类来负责处理Fragment的切换,这样Activity的代码会更简洁。

需要考虑到Fragment的添加、显示、隐藏、查找等操作。可能需要一个容器ID,通常是Activity中的一个FrameLayout,作为Fragment的容器。另外,需要保存所有已添加的Fragment的引用,以便后续快速切换,而不必每次都重新添加。

可能的实现步骤:

1. 创建一个FragmentManagerHelper类,接收Activity的supportFragmentManager和容器ID。

2. 维护一个Map或者List来保存已经添加的Fragment实例,使用Tag作为键,方便查找。

3. 提供切换Fragment的方法,比如switchFragment,参数是目标Fragment的Tag。

4. 在切换时,检查目标Fragment是否已经添加,如果未添加则add并显示,同时隐藏其他Fragment;如果已添加,则直接显示并隐藏其他。

5. 处理回退栈,可能需要addToBackStack,但用户是否需要保留每个切换操作的回退需要确认。

6. 考虑Fragment的懒加载,可以在显示时触发相关生命周期方法。

7. 确保线程安全,使用commitNow或者commitAllowingStateLoss,根据具体情况选择。

需要解决的关键点:

- 如何高效管理多个Fragment的实例,避免重复创建。

- 如何快速切换显示和隐藏,保持界面流畅。

- 如何封装成独立的类,减少Activity的代码量。

- 处理可能的异常情况,比如Fragment已经不在容器中。

切换时带有动画效果,或者支持自定义的过渡动画。

可能遇到的问题:

- 使用show/hide时,Fragment的生命周期不会触发onPause或onResume,需要用户自己处理数据的加载和释放。

- 回退栈的管理,如果用户按返回键,可能需要回到上一个Fragment的状态,这时候需要正确添加事务到回退栈。

在封装时,可以提供一个Helper类,内部使用事务来管理所有操作,对外暴露简单的方法如switchFragment(tag),并且处理所有隐藏和显示的逻辑。同时,可以提供一个接口或回调,当Fragment切换时通知Activity进行其他操作,比如更新标题栏等。

最后,测试不同场景下的Fragment切换,确保没有内存泄漏,所有Fragment正确显示和隐藏,回退栈工作正常。

在 Activity 中管理多个 Fragment 的切换时,可以通过以下封装方案提升代码复用性和可维护性:

封装工具类 FragmentManagerHelper

class FragmentManagerHelper(private val fragmentManager: FragmentManager,private val containerId: Int
) {// 存储已添加的 Fragment 实例private val fragments = mutableMapOf<String, Fragment>()private var currentTag: String? = null/*** 切换 Fragment* @param targetTag 目标 Fragment 的标识* @param allowStateLoss 是否允许状态丢失(用于特殊场景)*/fun switchFragment(targetTag: String, allowStateLoss: Boolean = false) {val transaction = fragmentManager.beginTransaction()val currentFragment = currentTag?.let { fragments[it] }// 如果目标 Fragment 未添加过if (!fragments.containsKey(targetTag)) {val newFragment = createFragment(targetTag) // 工厂方法创建实例fragments[targetTag] = newFragmenttransaction.add(containerId, newFragment, targetTag)}// 隐藏当前 FragmentcurrentFragment?.let { transaction.hide(it) }// 显示目标 Fragmentval targetFragment = fragments[targetTag]!!transaction.show(targetFragment)// 加入回退栈(可选)transaction.addToBackStack(targetTag)currentTag = targetTag// 提交事务if (allowStateLoss) {transaction.commitAllowingStateLoss()} else {transaction.commit()}}/*** 获取当前显示的 Fragment*/fun getCurrentFragment(): Fragment? {return currentTag?.let { fragments[it] }}/*** 创建 Fragment 的工厂方法(需根据业务实现)*/private fun createFragment(tag: String): Fragment {return when (tag) {"Home" -> HomeFragment()"Profile" -> ProfileFragment()"Settings" -> SettingsFragment()"Notifications" -> NotificationsFragment()"Messages" -> MessagesFragment()else -> throw IllegalArgumentException("Unknown fragment tag: $tag")}}
}

在 Activity 中使用

class MainActivity : AppCompatActivity() {private lateinit var fragmentHelper: FragmentManagerHelperoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 初始化 Fragment 管理器fragmentHelper = FragmentManagerHelper(supportFragmentManager, R.id.container)// 初始化显示第一个 Fragmentif (savedInstanceState == null) {fragmentHelper.switchFragment("Home")}}// 底部导航切换示例fun onBottomNavigationSelected(itemId: Int) {when (itemId) {R.id.nav_home -> fragmentHelper.switchFragment("Home")R.id.nav_profile -> fragmentHelper.switchFragment("Profile")R.id.nav_settings -> fragmentHelper.switchFragment("Settings")R.id.nav_notifications -> fragmentHelper.switchFragment("Notifications")R.id.nav_messages -> fragmentHelper.switchFragment("Messages")}}override fun onBackPressed() {// 处理回退栈逻辑(可选)if (fragmentManager.backStackEntryCount > 0) {fragmentManager.popBackStack()} else {super.onBackPressed()}}
}

主要特性说明

  1. 集中管理
    使用 Map 存储所有 Fragment 实例,避免重复创建

  2. 智能切换逻辑

    • 首次添加 Fragment 时执行 add()

    • 后续切换使用 show()/hide()

    • 自动维护当前显示的 Fragment 标识

  3. 生命周期感知
    通过 savedInstanceState 判断是否初始化,避免重复创建

  4. 扩展性设计

    • createFragment() 方法可扩展为抽象工厂模式

    • 支持自定义回退栈策略

  5. 状态丢失保护
    提供 commitAllowingStateLoss() 选项用于特殊场景

  6. 线程安全
    所有操作通过 FragmentManager 确保主线程执行

优化建议

  1. 懒加载支持
    在 Fragment 中添加以下方法:

    abstract class BaseFragment : Fragment() {private var isLoaded = falseoverride fun onResume() {super.onResume()if (!isLoaded) {lazyLoad()isLoaded = true}}abstract fun lazyLoad()
    }
  2. 动画支持
    在事务中添加过渡动画:

    transaction.setCustomAnimations(R.anim.slide_in_right,R.anim.slide_out_left,R.anim.slide_in_left,R.anim.slide_out_right
    )
  3. 状态保存
    在 Activity 中保存当前 Tag:

    override fun onSaveInstanceState(outState: Bundle) {super.onSaveInstanceState(outState)outState.putString("CURRENT_TAG", fragmentHelper.currentTag)
    }override fun onRestoreInstanceState(savedInstanceState: Bundle) {super.onRestoreInstanceState(savedInstanceState)savedInstanceState.getString("CURRENT_TAG")?.let {fragmentHelper.switchFragment(it)}
    }

这种封装方案可使 Fragment 切换逻辑与 Activity 解耦,提升代码的可测试性和可维护性,特别适合需要管理多个 Fragment 的复杂界面场景。

相关文章:

Kotlin FragmentTransaction多容器管理多个fragment

在Activity中管理五个Fragment的切换显示和隐藏&#xff0c;并且希望将这部分逻辑进行封装。之前已经教过他们如何在Kotlin中使用FragmentTransaction进行基本的添加、隐藏、显示和替换操作&#xff0c;现在需要进一步封装这些操作&#xff0c;提高代码的可维护性和复用性。 管…...

PyCharm显示主菜单和工具栏

显示主菜单 新版 PyCharm 是不显示主菜单的&#xff0c;要想显示主菜单和工具栏&#xff0c;则通过 “视图” → “外观” &#xff0c;勾选 “在单独的工具栏中显示主菜单” 和 “工具栏” 即可。 设置工具栏 此时工具栏里并没有什么工具&#xff0c;因此我们需要自定义工具…...

WebView2最低支持.NET frame4.5,win7系统

WebView2最低支持.NET frame什么版本 ‌WebView2 对 .NET Framework 的最低版本要求‌ ‌基础支持范围‌ WebView2 官方支持的 .NET Framework ‌最低版本为 4.5‌&#xff0c;同时兼容 ‌.NET Core 3.0‌ 及以上版本‌18。对于 WPF、WinForms 等桌面应用开发&#xff0c;需确…...

ClickOnce 部署

1、在远程服务器172.16.9.252共享文件文件夹Bluetooth. 2、设置版本自动更新. 3、设置部署 4、设置创建桌面菜单 二、远程发布IIS即可...

Kotlin 中 集合 Collection 的扩展方法完全指南

Kotlin 中 Collection 的扩展方法完全指南 “代码是最美的诗篇”——本文将带你进入 Kotlin 集合扩展函数的世界&#xff0c;帮助你写出既高效又优雅的代码 &#x1f680; 一、引言 &#x1f914; 在 Android 开发中&#xff0c;集合&#xff08;Collection&#xff09;的操作…...

STM32F407使用ESP8266连接阿里云并上传数据

文章目录 前言一、ESP01S介绍1.ESP01S2.MQTT固件烧录3.WIFI连接 二、阿里云平台介绍1.创建产品及添加设备2.连接云平台 三、数据上报四、命令下发五、完整工程 前言 在实现OTA功能我们必须学会如何连接云平台&#xff0c;本文会仔细介绍使用STM32F407和ESP8266连接阿里云平台&…...

TorchServe部署模型-index_to_name.json

在TorchServe部署模型时&#xff0c;若要将模型输出结果映射到指定标签&#xff08;如分类任务的类别名称&#xff09;&#xff0c;需通过index_to_name.json文件定义索引与标签的映射关系&#xff0c;并在打包模型时将其作为额外文件包含。以下是完整流程和命令示例&#xff1…...

每日一题——BMN3 小红炸砖块

“落下”操作只会对y轴有影响&#xff0c;所以注意y轴的变化即可 只要给出的坐标有砖块&#xff0c;就遍历查找他的上面是否有砖块&#xff0c;每一层都是这样&#xff0c;直到到没有砖块的那一层&#xff1b; 注意&#xff1a;定义矩阵时要注意&#xff0c;给出的坐标都是大…...

AWS服务器 磁盘空间升级到100G后,怎么使其生效?

在AWS&#xff08;Amazon Web Services&#xff09;上扩展EBS&#xff08;Elastic Block Store&#xff09;卷的大小后&#xff0c;服务器操作系统并不会自动识别新增的空间。要使操作系统识别并使用新增的磁盘空间&#xff0c;您需要进行一些额外的步骤。以下是详细的指导和说…...

AWS弹性容器服务(AWS Elastic Container Service,ECS)概述

李升伟 编译 标签&#xff1a;AWS | ECS | 容器 | Docker AWS弹性容器服务&#xff08;AWS Elastic Container Service&#xff0c;ECS&#xff09;简介 AWS弹性容器服务&#xff08;ECS&#xff09;是一项完全托管的容器编排服务&#xff0c;支持运行、管理和扩展容器化应用…...

【消息队列kafka_中间件】一、快速入门分布式消息队列

在当今大数据和分布式系统盛行的时代&#xff0c;消息队列作为一种关键的中间件技术&#xff0c;发挥着举足轻重的作用。其中&#xff0c;Apache Kafka 以其卓越的性能、高可扩展性和强大的功能&#xff0c;成为众多企业构建分布式应用的首选消息队列解决方案。本篇文章将带你深…...

【Axure元件分享】移动端滑动拨盘地区级联选择器

在移动端产品设计中&#xff0c;地区级联选择器&#xff08;省/市/区&#xff09;是用户信息录入场景的核心组件&#xff0c;尤其在电商收货地址、政务信息填报等高频业务中直接影响表单转化率。本文将介绍一款基于Axure的三级动态联动机型地区选择器&#xff0c;通过仿真级联滚…...

宁德时代25年校招演绎数字推理SHL测评题库题型及真题分析

非常感谢您对宁德时代的关注。祝贺您通过宁德时代校园招聘的专业面试环节&#xff0c;现邀请您参与完成以下测评。本轮共两份测评&#xff0c;每份测评对您的最终结果都非常重要&#xff0c;请务必在收到测评后48小时内完成!本测评需要进行远程监考&#xff0c;如果您无法或不愿…...

Python-Django+vue宠物服务管理系统功能说明

❥(^_-) 上千个精美定制模板,各类成品Java、Python、PHP、Android毕设项目,欢迎咨询。 ❥(^_-) 程序开发、技术解答、代码讲解、文档,💖文末获取源码+数据库+文档💖 💖软件下载 | 实战案例 💖文章底部二维码,可以联系获取软件下载链接,及项目演示视频。 本项目…...

洛谷普及B3691 [语言月赛202212] 狠狠地切割(Easy Version)

题目&#xff1a;[语言月赛202212] 狠狠地切割(Easy Version) 题号&#xff1a;B3691 难度&#xff1a;普及一 末尾包含对二分法优化的详细解释 题目分析 最后一句应该是本题的考查关键&#xff0c;关于筛选算法的时间优化&#xff0c; 但从功能理论上&#xff0c;我找到了…...

FPGA_BD Block Design学习(一)

PS端开发流程详细步骤 1.第一步&#xff1a;打开Vivado软件&#xff0c;创建或打开一个工程。 2.第二步&#xff1a;在Block Design中添加arm核心&#xff0c;并将其配置为IP核。 3.第三步&#xff1a;配置arm核心的外设信息&#xff0c;如DDR接口、时钟频率、UART接口等。 …...

Collection vs Collections:核心区别与面试指南

Collection vs Collections&#xff1a;核心区别与面试指南 一、本质区别&#xff08;核心记忆点&#xff09; 维度CollectionCollections身份集合框架的根接口操作集合的工具类包位置java.utiljava.util是否可实例化❌ 接口✅ 类&#xff08;但构造器私有&#xff0c;不可实…...

sqlite3基本语句

创建表 CREATE TABLE student ( id INTEGER PRIMARY KEY, -- 学号&#xff0c;主键 name TEXT NOT NULL, -- 姓名&#xff0c;不能为空 age INTEGER, -- 年龄 gender TEXT -- 性别 ); SQLite常用数据类型 主键 …...

jupyter notebook 显示conda虚拟环境

使用 nb_conda_kernels 安装 nb_conda_kernels&#xff1a;这个包可以自动从你的 Conda 环境中发现并列出内核。 conda activate base # 确保你在 base 环境或任何其他环境中安装 conda install nb_conda_kernels显示jupyternotebook当前所在的位置。...

华为海思IC前端中后端(COTXPU)岗位笔试机考题

近期华为海思即将开始IC设计实现实习岗位机考。小编今天给大家分享下华为海思相关机考题目。 华为海思2025届校招笔试面试经验分享 每年IC秋招笔试其实也是从题库中随机抽出一些题。 华为海思2025届校招笔试面试经验分享华为海思机考主要分三个方向&#xff0c;分别是物理方向…...

HarmonyOS NEXT 实现滑动拼图验证码功能

大家好&#xff0c;我是 V 哥。 在 Gitee 上看到一个用 Java 实现的 HarmonyOS 滑动拼图验证码功能&#xff0c;已经太老了&#xff0c;鸿蒙开发推荐使用 ArkTS 语言&#xff0c;V 哥来改造一下。 以下是基于 ArkTS 的实现方案。由于鸿蒙系统的特性差异&#xff0c;这里提供核…...

【XML基础-1】深入理解XML:介绍、语法规则与实际应用

XML&#xff08;可扩展标记语言&#xff09;作为数据表示和交换的标准格式&#xff0c;自1998年问世以来已成为现代计算领域不可或缺的一部分。本文将全面介绍XML的基础概念、详细语法规则以及它在各领域中的实际应用。 1. 什么是XML&#xff1f; XML&#xff08;eXtensible …...

STM32 HAL库扩大USB CDC的输入缓冲区

STM32 HAL库,使用USB, 扩大输入暂存区的方法 使用STM32的USB通讯CubeMX建立配置Serial Wire时钟配置USB配置时钟频率设置代码编写运行效果总结使用STM32的USB通讯 STM32可以不用使用串口转换直接和USB通讯。这给串口调试提供了极大的方便。编程,我使用了STM32CubeIDE编程。这…...

迭代器模式深度解析与实战案例

一、模式定义 迭代器模式&#xff08;Iterator Pattern&#xff09; 是一种行为设计模式&#xff0c;提供一种方法顺序访问聚合对象的元素&#xff0c;无需暴露其底层表示。核心思想是将遍历逻辑从聚合对象中分离&#xff0c;实现 遍历与存储的解耦。 二、核心组件 组件作用…...

Kotlin协程实用模版合集

目录 ✅ Kotlin 协程实用模板合集&#xff08;适合 Android 项目&#xff09; &#x1f4e6; 1. 基础挂起函数封装&#xff08;Repository 层&#xff09; ⚙️ 2. ViewModel 中使用协程 状态处理 ⏱️ 3. 带超时控制的挂起操作 &#x1f91d; 4. 并发请求合并&#xff0…...

基于Flask的Windows事件ID查询系统开发实践

基于Flask的Windows事件ID查询系统开发实践 一、项目背景与功能概述 Windows操作系统的事件日志系统记录了数百种不同的事件ID&#xff0c;每个ID对应特定的系统事件。本文介绍如何构建一个基于Web的事件ID查询系统&#xff0c;主要实现以下功能&#xff1a; 数据可视化展示…...

机器人编程基础---C语言中的运算符

C语言中的运算符 算术运算符关系运算符逻辑运算符位运算符C语言提供了多种运算符来执行不同的操作。 算术运算符 + 加法- 减法* 乘法/ 除法% 取模(求余)++ 自增-- 自减int a = 10, b = 5; int sum = a + b;...

设计模式之迭代器模式:遍历的艺术与实现

引言 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供了一种顺序访问聚合对象中各个元素的方法&#xff0c;而又不暴露其底层实现。迭代器模式将遍历逻辑与聚合对象解耦&#xff0c;使得我们可以用统一的方式处理不同的集合结构。…...

React七案例中

代码下载 地图找房模块 顶部导航栏 封装NavHeader组件实现城市选择&#xff0c;地图找房页面的复用&#xff0c;在 components 目录中创建组件 NavHeader&#xff0c;把之前城市列表写过的样式复制到 NavHeader.scss 下&#xff0c;在该组件中封装 antd-mobile 组件库中的 N…...

消息中间件篇——RabbitMQ,Kafka

RabbitMQ 如何保证消息不丢失&#xff1f; 生产者确认机制 消息持久化 消费者确认机制 RabbitMQ如何保证消息不丢失&#xff1f; RabbitMQ的重复消费问题如何解决&#xff1f; RabbitMQ中死信交换机&#xff08;RabbitMQ延迟队列有了解过吗&#xff1f;&#xff09; 延迟队列…...

HOW - 实现 useClickOutside 或者 useClickAway

场景 在开发过程中经常遇到需要点击除某div范围之外的区域触发回调&#xff1a;比如点击 dialog 外部区域关闭。 手动实现 import { useEffect } from "react"/*** A custom hook to detect clicks outside a specified element.* param ref - A React ref object…...

青少年编程考试 CCF GESP Python七级认证真题 2025年3月

Python 七级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 B C A B B A A B C A B B A B A 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 下列哪个选项是python中的关键字&#xff1f; A. function B. class C. method D. object…...

兆讯MH2103系列pin to pin替代STM32F103,并且性能超越

MH2103 是一款高性能的 32 位微控制器&#xff0c;由兆讯恒达推出&#xff0c;主要用于替代 STM32F103 系列产品。以下是关于 MH2103 芯片的详细介绍&#xff1a; 技术规格 内核与主频&#xff1a; 采用高性能 32 位 Cortex-M3 内核&#xff0c;最高工作频率可达 216 MHz。支…...

h5使用dsBridge与原生app通信--桥方法

dsBridge是一个轻量级的 JS 和原生 App 的通信桥梁库,使用起来比原生方便不少支持&#xff1a; 1.H5 调用 Native 方法&#xff08;JS → Native&#xff09; 2.Native 调用 H5 方法&#xff08;Native → JS&#xff09; 3.支持参数传递和异步回调 4.支持 Android、iOS、以…...

package.json配置项积累

peerDependencies 用途&#xff1a;peerDependencies 主要用于声明一个包在其宿主项目中期望安装的依赖版本。它通常用于确保插件或库与特定版本的其他库兼容。 行为&#xff1a; 在 npm v7之前&#xff0c;如果宿主项目未安装 peerDependencies 中列出的依赖&#xff0c;则不…...

Python安装软件包报错 fatal error: Python.h: No such file or directory

Python安装软件包报错 fatal error: Python.h: No such file or directory Failed to import transformers.integrations.integration_utils because of the following error (look up to see its traceback): Failed to import transformers.modeling_utils because of the f…...

数据结构与算法-图论-复习1(单源最短路,全源最短路,最小生成树)

1. 单源最短路 单一边权 BFS 原理&#xff1a;由于边权为单一值&#xff0c;可使用广度优先搜索&#xff08;BFS&#xff09;来求解最短路。BFS 会逐层扩展节点&#xff0c;由于边权相同&#xff0c;第一次到达某个节点时的路径长度就是最短路径长度。 用法&#xff1a;适用…...

uniapp:微信小程序,一键获取手机号

<button open-type"getPhoneNumber" getphonenumber"getphonenumber">一键获取</button> <script>export default {methods: {getphonenumber(e){uni.login({provider: weixin,success: (res)> {console.log(res);},});},}} </scr…...

协作焊接机器人

一、核心定义与核心特点 1. 定义 协作焊接机器人是基于协作机器人本体(具备力传感、轻量化、安全停机等特性),集成焊接电源、焊枪、视觉 / 电弧传感器等模块,实现人机共融焊接作业的自动化设备。其核心在于: 安全协作:支持与焊工共同工作,无需物理隔离;柔性适配:快速…...

SpringBoot和微服务学习记录Day2

微服务 微服务将单体应用分割成更小的的独立服务&#xff0c;部署在不同的服务器上。服务间的关联通过暴露的api接口来实现 优点&#xff1a;高内聚低耦合&#xff0c;一个模块有问题不影响整个应用&#xff0c;增加可靠性&#xff0c;更新技术方便 缺点&#xff1a;增加运维…...

【CornerTag组件详解:优雅的角标设计与实现】

CornerTag组件详解&#xff1a;优雅的角标设计与实现 组件完整代码 <template><divclass"corner-tag":style"{background: bgColor,padding: ${paddingY}px 0,fontSize: fontSize px,...customStyle}"><slot /></div> </tem…...

Mybatis-缓存详解

什么是缓存&#xff1f; 存在内存中的临时数据 将用户经常查询的数据放在缓存中&#xff0c;用户去查询数据就不用从磁盘上&#xff08;关系型数据库数据文件&#xff09;查询&#xff0c;从缓存中查询&#xff0c;从而提高查询效率&#xff0c;解决了高并发系统的性能问题 经…...

WHAT - React useId vs uuid

目录 uuiduseId适用场景语法示例注意事项 复杂示例示例&#xff1a;动态表单列表 useId解读重点 useId vs uuid一句话总结对比表格示例对比useId 用于表单uuid() 用在 UI 会出问题uuid 的适合场景 总结建议 uuid 在 WHAT - Math.random&#xff1f;伪随机&#xff1f; 中我们…...

Leetcode 跳跃游戏 II (贪心算法)

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…...

银河麒麟V10 Ollama+ShellGPT打造Shell AI助手——筑梦之路

环境说明 1. 操作系统版本: 银河麒麟V10 2. CPU架构&#xff1a;X86 3. Python版本&#xff1a;3.12.9 4. 大模型&#xff1a;mistral:7b-instruct 准备工作 1. 编译安装python 3.12 # 下载python 源码wget https://www.python.org/ftp/python/3.12.9/Python-3.12.9.tg…...

【物联网】GPT延时

文章目录 前言一、GPT实现延时1. 定时器介绍2. I.MX6ull GPT定时器介绍1&#xff09;GPT定时器工作原理2&#xff09;GPT的输入捕获3&#xff09;GPT的输出比较 3. 高精度延时实现1&#xff09;实现思路 前言 使用 GPT 实现延时控制以及基于 PWM 实现蜂鸣器发声与频率调节这两…...

【套题】大沥2019年真题——第4题

04.数字圈 题目描述 当我们写数字时会发现有些数字有封闭区域&#xff0c;有的数字没有封闭区域。 数字 0 有一个封闭区域&#xff0c;数字 1、2、 3 都没有封闭区域&#xff0c;数字 4 有一个封闭区域&#xff0c;数字 5 没有封闭区域&#xff0c;数字 6 有一个封闭区域&#…...

idea 安装 proxyai 后的使用方法

1. 可以默认使用ProxyAi 安装后使用如下配置可以进行代码提示 配置 使用示例 2. 这里有必要说一下&#xff0c;这里要选择提供服务的ai 选择后才可以使用ProxyAI或者Custom openAI 3. 可以使用custom openAi, 要自行配置 1&#xff09;配置 code completions 这是header …...

构建实时、融合的湖仓一体数据分析平台:基于 Delta Lake 与 Apache Iceberg

1. 执行摘要 挑战&#xff1a; 传统数据仓库在处理现代数据需求时面临诸多限制&#xff0c;包括高昂的存储和计算成本、处理海量多样化数据的能力不足、以及数据从产生到可供分析的端到端延迟过高。同时&#xff0c;虽然数据湖提供了低成本、灵活的存储&#xff0c;但往往缺乏…...

数据库的MVCC机制详解

MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09;是数据库系统中常用的并发控制机制&#xff0c;它允许数据库在同一时间点保存数据的多个版本&#xff0c;从而实现非阻塞的读操作&#xff0c;提高并发性能。 MVCC的核心思想是&…...