Android开机启动流程
Android开机启动流程
systemReady启动"added application"
@frameworks/base/services/java/com/android/server/SystemServer.java
mainnew SystemServer().run();startBootstrapServicesmActivityManagerService = ActivityManagerService.Lifecycle.startService(mSystemServiceManager, atm);mDisplayManagerService = mSystemServiceManager.startService(DisplayManagerService.class);mActivityManagerService.setSystemProcess();
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.javaServiceManager.addService(Context.ACTIVITY_SERVICEServiceManager.addService("meminfo", new MemBinder(this)ServiceManager.addService("gfxinfo", new GraphicsBinder(this))ApplicationInfo info = mContext.getPackageManager().getApplicationInfo( "android", STOCK_PM_FLAGS | MATCH_SYSTEM_ONLY);mSystemThread.installSystemApplicationInfo(info, getClass().getClassLoader());ProcessRecord app = mProcessList.newProcessRecordLocked(info, info.processName, startOtherServices
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.javamActivityManagerService.systemReady(() -> {mLocalDeviceIdleController = LocalServices.getService(DeviceIdleInternal.class);
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.javamActivityTaskManager.onSystemReady();
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.javamTaskSupervisor.onSystemReady();
@frameworks/base/services/core/java/com/android/server/wm/LaunchParamsPersister.javamLaunchParamsPersister.onSystemReady();PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class);mPackageList = pmi.getPackageList(new PackageListObserver());
@frameworks/base/services/core/java/com/android/server/am/UserController.javamUserController.onSystemReady();
@frameworks/base/services/core/java/com/android/server/appop/AppOpsService.javamAppOpsService.systemReady();mProcessList.onSystemReady();mAppExitInfoTracker.onSystemReady();ArrayList<ProcessRecord> procsToKill = null; //杀应用名单for (int i=mPidsSelfLocked.size()-1; i>=0; i--) {ProcessRecord proc = mPidsSelfLocked.valueAt(i);procsToKill.add(proc);
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.javastartPersistentApps(PackageManager.MATCH_DIRECT_BOOT_AWARE);final List<ApplicationInfo> apps = AppGlobals.getPackageManager().getPersistentApplications(STOCK_PM_FLAGS | matchFlags).getList();addAppLocked(app, null, false, null ProcessRecord app;app = mProcessList.newProcessRecordLocked(info, customProcess, isolated, 0,mProcessList.startProcessLocked(app, new HostingRecord("added application", customProcess != null ? customProcess : app.processName),Start proc 1056:com.android.se/1068 for type:added application type end com.android.seStart proc 1078:com.android.phone/1001 for type:added application type end com.android.phoneStart proc 1079:com.android.systemui/u0a50 for type:added application type end com.android.systemui
Home应用程序
Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应用程序就是Launcher了.
@frameworks/base/services/core/java/com/android/server/am/UserController.java
finishUserUnlockingmHandler.obtainMessage(USER_UNLOCK_MSG, userId, 0, uss).sendToTarget();case USER_UNLOCK_MSG: finishUserUnlockedfinishUserUnlockedCompletedmHandler.obtainMessage(USER_UNLOCKED_MSG, userId, 0).sendToTarget();case USER_UNLOCKED_MSG: mInjector.getSystemServiceManager().onUserUnlocked(msg.arg1);mService.mTaskSupervisor.onUserUnlocked(user.getUserIdentifier());
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.javascheduleStartHome("userUnlocked");mHandler.obtainMessage(START_HOME_MSG, reason).sendToTarget();case START_HOME_MSG: { mRootWindowContainer.startHomeOnEmptyDisplays((String) msg.obj); @frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.javastartHomeOnEmptyDisplaysforAllTaskDisplayAreas(taskDisplayArea -> {startHomeOnTaskDisplayArea(mCurrentUser, myReason, taskDisplayArea,
@frameworks/base/services/core/java/com/android/server/wm/ActivityStartController.javaService.getActivityStartController().startHomeActivity(homeIntent, aInfo, myReason, taskDisplayArea);
@frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.javamLastHomeActivityStartResult = obtainStarter(intent, "startHomeActivity: " + reason).setActivityOptions(options.toBundle()).execute();res = executeRequest(mRequest);ActivityRecord r = new ActivityRecord.Builder(mService)..setActivityInfo(aInfo)mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession,result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,startFlags, doResume, options, inTask, inTaskFragment, restrictedBgActivity,mTargetRootTask.startActivityLocked(mStartActivity,
@frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.javamRootWindowContainer.resumeFocusedTasksTopActivities(mTargetRootTask, mStartActivity, mOptions, mTransientLaunch);final Task focusedRoot = display.getFocusedRootTask();
@frameworks/base/services/core/java/com/android/server/wm/Task.javafocusedRoot.resumeTopActivityUncheckedLocked(target, targetOptions);someActivityResumed = resumeTopActivityInnerLocked(prev, options, deferPause);
@frameworks/base/services/core/java/com/android/server/wm/TaskFragment.javaresumed[0] = topFragment.resumeTopActivity(prev, options, deferPause);ActivityRecord next = topRunningActivity(true /* focusableOnly */);pausing |= startPausing(mTaskSupervisor.mUserLeaving, false /* uiSleeping */, next, "resumeTopActivity"); //这里就是stop上一个activity的地方if (next.attachedToProcess()) { //要启动的activity所在的进程已经起来了,直接通过事务的形式去启动activityfinal ClientTransaction transaction = ClientTransaction.obtain(next.app.getThread(), next.appToken);mAtmService.getLifecycleManager().scheduleTransaction(transaction);} else { //如果进程没启动,调用ActivityTaskSupervisor的startSpecificActivity
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.javamTaskSupervisor.startSpecificActivity(next, true, true);
@base/services/core/java/com/android/server/wm/ActivityTaskManagerService.javamService.startProcessAsync(r, knownToBeDead, isTop, isTop ? "top-activity" : "activity");final Message m = PooledLambda.obtainMessage(ActivityManagerInternal::startProcess, mAmInternal, activity.processName,mH.sendMessage(m);LocalService::startProcess //class LocalService extends ActivityManagerInternalstartProcessLocked(processName, info, knownToBeDead, 0 /* intentFlags */, new HostingRecord(hostingType, hostingName, isTop),
@frameworks/base/services/core/java/com/android/server/am/ProcessList.javareturn mProcessList.startProcessLocked(processName, info, knownToBeDead, intentFlags,startProcessLocked(app, hostingRecord, zygotePolicyFlags, abiOverride);startProcessLocked(app, hostingRecord, zygotePolicyFlags, falsestartProcessLocked(hostingRecord, entryPoint, app, uid, gids, runtimeFlags, zygotePolicyFlags, mountExternal, seInfo, requiredAbi,mService.mProcStartHandler.post(() -> handleProcessStart( app,handleProcessStartedLocked(app, startResult, startSeq);return handleProcessStartedLocked(pending, startResult.pid, startResult.usingWrapper,buf.append("Start proc "); //Start proc 1486:com.dynabook.VDlauncher/1000 for top-activity {com.dynabook.VDlauncher/com.dynabook.VDlauncher.MainActivity}buf.append(pid);buf.append(':');buf.append(app.processName);buf.append('/');buf.append(app.getHostingRecord().getType());buf.append(app.getHostingRecord().getName());..............
@src/main/java/com/xxx/launcher/MainActivity.javaMainActivity::onCreate
@frameworks/base/services/java/com/android/server/SystemServer.java
main
new SystemServer().run();
startBootstrapServices
mActivityManagerService = ActivityManagerService.Lifecycle.startService(mSystemServiceManager, atm);
mDisplayManagerService = mSystemServiceManager.startService(DisplayManagerService.class);
mActivityManagerService.setSystemProcess();
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
ServiceManager.addService(Context.ACTIVITY_SERVICE
ServiceManager.addService("meminfo", new MemBinder(this)
ServiceManager.addService("gfxinfo", new GraphicsBinder(this))
ApplicationInfo info = mContext.getPackageManager().getApplicationInfo( "android", STOCK_PM_FLAGS | MATCH_SYSTEM_ONLY);
mSystemThread.installSystemApplicationInfo(info, getClass().getClassLoader());
ProcessRecord app = mProcessList.newProcessRecordLocked(info, info.processName,
startOtherServices
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
mActivityManagerService.systemReady(() -> {
mLocalDeviceIdleController = LocalServices.getService(DeviceIdleInternal.class);
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
mActivityTaskManager.onSystemReady();
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
mTaskSupervisor.onSystemReady();
@frameworks/base/services/core/java/com/android/server/wm/LaunchParamsPersister.java
mLaunchParamsPersister.onSystemReady();
PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class);
mPackageList = pmi.getPackageList(new PackageListObserver());
@frameworks/base/services/core/java/com/android/server/am/UserController.java
mUserController.onSystemReady();
@frameworks/base/services/core/java/com/android/server/appop/AppOpsService.java
mAppOpsService.systemReady();
mProcessList.onSystemReady();
mAppExitInfoTracker.onSystemReady();
ArrayList<ProcessRecord> procsToKill = null; //杀应用名单
for (int i=mPidsSelfLocked.size()-1; i>=0; i--) {
ProcessRecord proc = mPidsSelfLocked.valueAt(i);
procsToKill.add(proc);
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
startPersistentApps(PackageManager.MATCH_DIRECT_BOOT_AWARE);
final List<ApplicationInfo> apps = AppGlobals.getPackageManager().getPersistentApplications(STOCK_PM_FLAGS | matchFlags).getList();
addAppLocked(app, null, false, null
ProcessRecord app;
app = mProcessList.newProcessRecordLocked(info, customProcess, isolated, 0,
mProcessList.startProcessLocked(app, new HostingRecord("added application", customProcess != null ? customProcess : app.processName),
Start proc 1056:com.android.se/1068 for type:added application type end com.android.se
Start proc 1078:com.android.phone/1001 for type:added application type end com.android.phone
Start proc 1079:com.android.systemui/u0a50 for type:added application type end com.android.systemui
@frameworks/base/services/core/java/com/android/server/am/UserController.java
finishUserUnlocking
mHandler.obtainMessage(USER_UNLOCK_MSG, userId, 0, uss).sendToTarget();
case USER_UNLOCK_MSG: finishUserUnlocked
finishUserUnlockedCompleted
mHandler.obtainMessage(USER_UNLOCKED_MSG, userId, 0).sendToTarget();
case USER_UNLOCKED_MSG: mInjector.getSystemServiceManager().onUserUnlocked(msg.arg1);
mService.mTaskSupervisor.onUserUnlocked(user.getUserIdentifier());
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
scheduleStartHome("userUnlocked");
mHandler.obtainMessage(START_HOME_MSG, reason).sendToTarget();
case START_HOME_MSG: { mRootWindowContainer.startHomeOnEmptyDisplays((String) msg.obj);
@frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
startHomeOnEmptyDisplays
forAllTaskDisplayAreas(taskDisplayArea -> {
startHomeOnTaskDisplayArea(mCurrentUser, myReason, taskDisplayArea,
@frameworks/base/services/core/java/com/android/server/wm/ActivityStartController.java
Service.getActivityStartController().startHomeActivity(homeIntent, aInfo, myReason, taskDisplayArea);
@frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
mLastHomeActivityStartResult = obtainStarter(intent, "startHomeActivity: " + reason).setActivityOptions(options.toBundle()).execute();
res = executeRequest(mRequest);
ActivityRecord r = new ActivityRecord.Builder(mService)..setActivityInfo(aInfo)
mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession,
result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,startFlags, doResume, options, inTask, inTaskFragment, restrictedBgActivity,
mTargetRootTask.startActivityLocked(mStartActivity,
@frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
mRootWindowContainer.resumeFocusedTasksTopActivities(mTargetRootTask, mStartActivity, mOptions, mTransientLaunch);
final Task focusedRoot = display.getFocusedRootTask();
@frameworks/base/services/core/java/com/android/server/wm/Task.java
focusedRoot.resumeTopActivityUncheckedLocked(target, targetOptions);
someActivityResumed = resumeTopActivityInnerLocked(prev, options, deferPause);
@frameworks/base/services/core/java/com/android/server/wm/TaskFragment.java
resumed[0] = topFragment.resumeTopActivity(prev, options, deferPause);
ActivityRecord next = topRunningActivity(true /* focusableOnly */);
pausing |= startPausing(mTaskSupervisor.mUserLeaving, false /* uiSleeping */, next, "resumeTopActivity"); //这里就是stop上一个activity的地方
if (next.attachedToProcess()) { //要启动的activity所在的进程已经起来了,直接通过事务的形式去启动activity
final ClientTransaction transaction = ClientTransaction.obtain(next.app.getThread(), next.appToken);
mAtmService.getLifecycleManager().scheduleTransaction(transaction);
} else { //如果进程没启动,调用ActivityTaskSupervisor的startSpecificActivity
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
mTaskSupervisor.startSpecificActivity(next, true, true);
@base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
mService.startProcessAsync(r, knownToBeDead, isTop, isTop ? "top-activity" : "activity");
final Message m = PooledLambda.obtainMessage(ActivityManagerInternal::startProcess, mAmInternal, activity.processName,
mH.sendMessage(m);
LocalService::startProcess //class LocalService extends ActivityManagerInternal
startProcessLocked(processName, info, knownToBeDead, 0 /* intentFlags */, new HostingRecord(hostingType, hostingName, isTop),
@frameworks/base/services/core/java/com/android/server/am/ProcessList.java
return mProcessList.startProcessLocked(processName, info, knownToBeDead, intentFlags,
startProcessLocked(app, hostingRecord, zygotePolicyFlags, abiOverride);
startProcessLocked(app, hostingRecord, zygotePolicyFlags, false
startProcessLocked(hostingRecord, entryPoint, app, uid, gids, runtimeFlags, zygotePolicyFlags, mountExternal, seInfo, requiredAbi,
mService.mProcStartHandler.post(() -> handleProcessStart( app,
handleProcessStartedLocked(app, startResult, startSeq);
return handleProcessStartedLocked(pending, startResult.pid, startResult.usingWrapper,
buf.append("Start proc "); //Start proc 1486:com.dynabook.VDlauncher/1000 for top-activity {com.dynabook.VDlauncher/com.dynabook.VDlauncher.MainActivity}
buf.append(pid);
buf.append(':');
buf.append(app.processName);
buf.append('/');
buf.append(app.getHostingRecord().getType());
buf.append(app.getHostingRecord().getName());
..............
@src/main/java/com/xxx/launcher/MainActivity.java
MainActivity::onCreate
相关文章:
Android开机启动流程
Android开机启动流程 systemReady启动"added application" frameworks/base/services/java/com/android/server/SystemServer.java mainnew SystemServer().run();startBootstrapServicesmActivityManagerService ActivityManagerService.Lifecycle.startService(…...
数据结构基本知识
一、什么是数据结构 1.1、组织存储数据 ---------》内存(存储) 1.2、研究目的 如何存储数据(变量,数组....)程序数据结构算法 1.3、常见保存数据的方法 数组:保存自己的数据指针:是间接访问已经存在的…...
浙大数据结构:02-线性结构4 Pop Sequence
这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop 机翻 1、条件准备 stk是栈,que是队列。 tt指向的是栈中下标,fr…...
java开发,记录一些注解和架构 pojo、entity、respository
最近接了一个项目,说是项目其实也不算是项目,因为是把这个项目赛到其他项目中的。 熟悉一些这个项目的功能,梳理了一下,在代码开发中主要关心pojo、entity、respository、controller、service。 在这里主要记录前3个的流程与作用…...
MatLab基础学习01
MatLab基础学习01 1.基础入门2.MatLab的数据类型2.1数字2.2字符串2.3矩阵2.4.元胞数组2.5结构体 3.MatLab的矩阵的操作3.1矩阵定义与构造3.2矩阵的下标取值 4.MatLab的逻辑流程4. For循环结构4.2 While循环,当条件成立的时候进行循环4.3 IF end 1.基础入门 matlba必…...
第 5 章多视图几何
本章讲解如何处理多个视图,以及如何利用多个视图的几何关系来恢复照相机位置信息和三维结构。通过在不同视点拍摄的图像,我们可以利用特征匹配来计算出三维场景点以及照相机位置。本章会介绍一些基本的方法,展示一个三维重建的完整例子&#…...
IOS 开发者账号注册流程
注册步骤 准备资料 营业执照 法人信息(电话、身份证信息) 注册邮箱(公司邮箱) 开发者信息(电话、身份证信息、邮箱)1. 注册AppleID 注册地址: https://appleid.apple.com/account 填写表单信…...
netty之NioEventLoop和NioEventLoopGroup
类结构图 NioEventLoopGroup #mermaid-svg-5g1iVjr5oyhqXK92 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5g1iVjr5oyhqXK92 .error-icon{fill:#552222;}#mermaid-svg-5g1iVjr5oyhqXK92 .error-text{fill:#55222…...
睿考网:中级经济师考试题型有哪些?
中级经济师考试时间在每年的11月份,2024年考试时间定于11月16-17日,考试科目为《经济基础知识》与《专业知识与实务》两科。 《专业知识与实务》有10个专业,分别是工商管理、知识产权、农业经济、财政税收、金融、保险、运输经济、人力资源管…...
kubernetes集群部署Confluence 7.2.0+mysql 5.7(自测有效)
背景介绍: Confluence是一个专业的企业知识管理与协同软件。使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。 这里介绍的使用的是Confluence 7.2.0版本的。 一、在kubernetes集群部署 1…...
Vmware ubuntu22.04 虚拟机 连接Windows主机虚拟串口
1. Windows虚拟串口配置 虚拟串口下载:虚拟串口 VSPD 的使用_vspd使用教程-CSDN博客 虚拟串口使用:使用虚拟串口在一台电脑上模拟串口通讯_pc怎么模拟一主多从串口-CSDN博客 2. ubuntu虚拟串口配置 Vmware ubuntu22.04 虚拟机 连接windows主机虚拟串口…...
Postgresql碎片整理
创建pgstattuple 扩展 CREATE EXTENSION pgstattuple 获取表的元组(行)信息,包括空闲空间的比例和行的平均宽度 SELECT * FROM pgstattuple(表名); 查看表和索引大小 SELECT pg_relation_size(表名), pg_relation_size(索引名称); 清理碎片方…...
【最新华为OD机试E卷-支持在线评测】字母组合(200分)多语言题解-(Python/C/JavaScript/Java/Cpp)
🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…...
力扣493.翻转对
class Solution {public static int MAXN 50001;public static int[] help new int[MAXN];public static void main(String[] args) {}public static int reversePairs(int[] arr) {return counts(arr, 0, arr.length - 1);}//统计l …… r上反转对的数量,同时计算…...
潜望长焦+快充:vivo X200系列,小尺寸手机的大突破
在智能手机市场日益激烈的竞争中,厂商们不断推陈出新,以满足消费者多样化的需求。vivo作为中国知名的智能手机品牌,一直以其创新的设计和强大的功能赢得市场的认可。 近日,vivo X200系列的即将发布引起了广泛关注,特别…...
Stable Diffusion训练LoRA模型参数详细说明(阿里巴巴堆友AI)
工具:线上模型训练堆友AI 一、训练参数 批量大小 (Batch Size) 作用:每次训练中使用的样本数量。参考值:可以从 8 到 64,取决于显存大小。 训练轮数 (Epochs) 作用:完整遍历训练数据的次数。参考值:通…...
Learn ComputeShader 12 Setting up a buffer-based particle effect
unity有自己的粒子系统,但是这次我们要尝试创建一个我们自己的粒子系统,而且使用计算着色器有下面这些好处。总而言之,计算着色器适合处理大规模的数据集。例如,能够高效地处理数万个甚至数百万个粒子的计算。这对于粒子系统这样的…...
【STL中容器汇总】map、list、vector等详解
容器学习分享 1、STL简介1.1、STL六大组件 2、vector容器2.1、vector 基本操作2.2、vector容器示例2.3、vector容器存放自定义数据类型示例2.3、vector嵌套vector示例 3、list 容器3.1使用示例3.2、list容器基本函数 4、map容器4.1、map函数原型4.2、map函数示例 1、STL简介 ST…...
Semantic Kernel + Natasha:一小时快速生成100个API的奇迹
大家好,我今天带来了一个让人瞠目结舌的实验:在一小时内快速生成了100个API! 其实如果手速高,可以更多。要知道,这得益于之前介绍过的Natasha —— 一个可以动态编译并加载代码的神奇工具。 动态编程神器! 探秘.Net…...
rancher upgrade 【rancher 升级】
文章目录 1. 背景2. 下载3. 安装4. 检查5. 测试5.1 创建项目5.2 创建应用5.3 删除集群5.4 注册集群 1. 背景 rancher v2.8.2 升级 v2.9.1 2. 下载 下载charts helm repo add rancher-latest https://releases.rancher.com/server-charts/latest helm repo update helm fetc…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
