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

Android adb shell dumpsys audio 信息查看分析详解

Android adb shell dumpsys audio 信息查看分析详解

一、前言

Android 如果要分析当前设备的声音通道相关日志,
仅仅看AudioService的日志是看不到啥日志的,但是看整个audio关键字的日志又太多太乱了,
所以可以看一下系统提供的一个调试指令dumpsys audio 返回的信息进行定位分析,
里面主要包含了AudioService启动时间,当前设备的音频流指向,音频流的声音大小,音频外设的连接情况,音频播放记录,音频外设连接断开记录等等信息。

不同的Android 系统使用 dumpsys audio 命令返回的日志信息可能会有差异,
因为打印返回的信息就是AudioService.java里面打印显示的,
本文的示例讲解是以mtk方案的Android14日志信息进行讲解。
网上基本没有对dumpsys audio 日志信息进行分析的,有兴趣的可以收藏查看。

二、分析

1、简单示例和主要内容

本示例日志是设备连接蓝牙耳机后的dumpsys audio情况日志信息:

# dumpsys audio
[18:57:20]Events log: audio services lifecycle
[18:57:20]11-22 18:54:07:681 AudioService() //(1)AudioService 启动时间,大概可以推测出开机时间[18:57:20]MediaFocusControl dump time: 6:57:22 PM //(2)执行dumpsys audio的时间//(3)dumpsys audio最重要的内容,设备支持声音流情况
[18:57:20]Stream volumes (device: index)
[18:57:20]- STREAM_VOICE_CALL (aliased to: STREAM_MUSIC):
。。。
[18:57:20]- STREAM_SYSTEM (aliased to: STREAM_MUSIC):
。。。
[18:57:20]- STREAM_RING (aliased to: STREAM_MUSIC):
。。
//(4)基本是音频播放的情况,上面其他声音通道都是注释了以这个为标准
[18:57:20]- STREAM_MUSIC: 
[18:57:20]   Muted: false
[18:57:20]   Muted Internally: false
[18:57:20]   Min: 0  //声音范围
[18:57:20]   Max: 15
[18:57:20]   streamVolume:7 //当前声音大小
[18:57:20]   Current: 2 (speaker): 7, 80 (bt_a2dp): 7, 400 (hdmi): 7, 40000000 (default): 7
[18:57:20]   Devices: bt_a2dp(80) //当前声音通道,蓝牙
[18:57:20]   Volume Group: music
[18:57:20]
[18:57:20]- STREAM_ALARM (aliased to: STREAM_MUSIC):
[18:57:20]   Muted: false
[18:57:20]   Muted Internally: false
[18:57:20]   Min: 1
[18:57:20]   Max: 7
[18:57:20]   streamVolume:4
[18:57:20]   Current: 2 (speaker): 4, 80 (bt_a2dp): 4, 400 (hdmi): 4, 40000000 (default): 4
[18:57:20]   Devices: speaker(2), bt_a2dp(80)
[18:57:20]   Volume Group: alarm//其他声音通道比较少实用,比如铃声,通知等情况
[18:57:20]- STREAM_NOTIFICATION (aliased to: STREAM_MUSIC):
[18:57:20]- STREAM_BLUETOOTH_SCO:
[18:57:20]- STREAM_SYSTEM_ENFORCED (aliased to: STREAM_MUSIC):
[18:57:20]- STREAM_DTMF (aliased to: STREAM_MUSIC):
[18:57:20]- STREAM_TTS (aliased to: STREAM_MUSIC):
[18:57:20]- STREAM_ACCESSIBILITY (aliased to: STREAM_MUSIC):
[18:57:20]- STREAM_ASSISTANT (aliased to: STREAM_MUSIC):
。。。//Volume Groups 不知道是干啥的,类型也是挺多的。
[18:57:20]Volume Groups (device: index)
[18:57:20]- VOLUME GROUP voice_call:
[18:57:20]   Muted: false
[18:57:20]   Min: 1
[18:57:20]   Max: 7
[18:57:20]   Current: 2 (speaker): 4, 80 (bt_a2dp): 7, 40000000 (default): 4
[18:57:20]   Devices: bt_a2dp
[18:57:20]   Streams: STREAM_VOICE_CALL [18:57:20]- VOLUME GROUP system:
[18:57:20]   Muted: false
[18:57:20]   Min: 0
[18:57:20]   Max: 100
[18:57:20]   Current: 2 (speaker): 47, 80 (bt_a2dp): 7, 40000000 (default): 47
[18:57:20]   Devices: bt_a2dp
[18:57:20]   Streams: STREAM_SYSTEM [18:57:20]- VOLUME GROUP ring:
[18:57:20]- VOLUME GROUP music:
[18:57:20]- VOLUME GROUP alarm:
[18:57:20]- VOLUME GROUP alarm:
[18:57:20]- VOLUME GROUP bluetooth_sco:
[18:57:20]- VOLUME GROUP enforced_audible:
[18:57:20]- VOLUME GROUP dtmf:
[18:57:20]- VOLUME GROUP accessibility:
[18:57:20]- VOLUME GROUP assistant:
[18:57:20]- VOLUME GROUP AUDIO_STREAM_REROUTING:
[18:57:20]- VOLUME GROUP AUDIO_STREAM_PATCH:VOLUME GROUP类型的 Streams属性值都是指向上面的Stream volumes类型的。[18:57:20]Audio routes:
[18:57:20]  mMainType=0x0
//(5)当前连接蓝牙的设备名称,如果未连接蓝牙为null
[18:57:20]  mBluetoothName=Xiaodu Portable Speaker  //(6)音频播放情况日志
[19:00:32]Events log: playback activity as reported through PlayerBase
//开机铃声
[19:00:32]11-22 18:54:09:789 new player piid:71 uid/pid:1000/745 type:android.media.SoundPool attr:AudioAttributes: usage=USAGE_ASSISTANCE_SONIFICATION content=CONTENT_TYPE_SONIFICATION flags=0x800 tags= bundle=null session:0
[19:00:33]11-22 18:54:10:837 new player piid:79 uid/pid:1000/1069 type:android.media.SoundPool attr:AudioAttributes: usage=USAGE_MEDIA content=CONTENT_TYPE_UNKNOWN flags=0x800 tags= bundle=null session:0。。。//音频文件播放+停止+播放+停止操作的日志
[19:00:33]11-22 18:58:37:956 player piid:103 event:started
[19:00:33]11-22 18:58:38:076 player piid:103 format update:FormatInfo{isSpatialized=false, channelMask=0x3, sampleRate=44100}
[19:00:33]11-22 18:58:38:175 player piid:103 event:device updated deviceId:5
[19:00:33]11-22 18:58:38:190 player piid:103 event:device updated deviceId:5
[19:00:33]11-22 18:58:42:920 player piid:103 event:paused
[19:00:33]11-22 19:00:24:155 player piid:103 event:started
[19:00:33]11-22 19:00:24:169 player piid:103 format update:FormatInfo{isSpatialized=false, channelMask=0x3, sampleRate=44100}
[19:00:33]11-22 19:00:24:204 player piid:103 event:device updated deviceId:5
[19:00:33]11-22 19:00:29:492 player piid:103 event:paused//(7)当前连接的设备,这里是连接蓝牙耳机
[18:57:21]  Connected devices:
[18:57:21]    [DeviceInfo: type:0x80 (bt_a2dp) name:Xiaodu Portable Speaker  addr:48:F3:F3:ED:78:AD codec: 1f000000 sensorUuid: 00000000-0000-0000-4254-48f3f3ed78ad disabled modes: {}]
[18:57:21]//(8)如果是连接的usb有线耳机,另外一份日志拼过来的
[15:01:34]  Connected devices:
[15:01:34]    [DeviceInfo: type:0x4000000 (usb_headset) name:USB-Audio - USB Speaker Phone addr:card=4;device=0 codec: 0 sensorUuid: null disabled modes: {}]//(9)连接蓝牙耳机、有线耳机等外设音箱的日志
[18:57:21]Events log: wired/A2DP/hearing aid device connection
。。。
[18:57:21]11-22 18:57:04:640 BT profile service: connecting HEARING_AID profile
[18:57:21]11-22 18:57:04:666 BT profile service: connecting A2DP profile
[18:57:21]11-22 18:57:09:875 msg: onBluetoothActiveDeviceChange  state=2 addr=48:F3:F3:ED:78:AD prof=2 supprNoisy=true src=AudioService
[18:57:21]11-22 18:57:09:885 BT connected: addr=48:F3:F3:ED:78:AD profile=2 state=2 codec=AUDIO_FORMAT_SBC
[18:57:21]11-22 18:57:10:074 A2DP device addr=48:F3:F3:ED:78:AD now available
//上面可以看到蓝牙连接的时间记录//(10)声音通道占用的日志
[18:57:21]Events log: force use (logged before setForceUse() is executed)
[18:57:21]11-22 18:54:07:774 setForceUse(FOR_DOCK, FORCE_DIGITAL_DOCK) due to readDockAudioSettings
。。。
[18:57:21]11-22 18:54:08:521 setForceUse(FOR_VIBRATE_RINGING, FORCE_NONE) due to muteRingerModeStreams() from u/pid:1000/745
。。。
//从最后一行日志看,最后是设置为蓝牙通道的
[18:57:21]11-22 18:57:09:897 setForceUse(FOR_MEDIA, FORCE_NONE) due to setBluetoothA2dpOn(true) from u/pid:1000/745 src:onSetBtActiveDevice//(11)声音变化和通道情况
[18:57:21]Events log: volume changes (logged when command received by AudioService)
[18:57:21]11-22 18:57:09:885 VolumeStreamState.muteInternally(stream:STREAM_MUSIC, muted)
[18:57:21]11-22 18:57:10:053 setDeviceVolumeBehavior: dev:bt_a2dp addr:48:F3:F3:ED:78:AD behavior:DEVICE_VOLUME_BEHAVIOR_VARIABLE pack:com.android.bluetooth
[18:57:21]11-22 18:57:10:156 avrcpSupportsAbsoluteVolume addr=48:F3:F3:ED:78:AD support=false
[18:57:21]11-22 18:57:10:323 VolumeStreamState.muteInternally(stream:STREAM_MUSIC, unmuted)
//从上面日志看是蓝牙声音通道,STREAM_MUSIC 流//(12)AudioSystemAdapter 不清楚是啥日志
[18:57:21]AudioSystemAdapter:
[18:57:21] last cache clear time: 11-22 18:57:10:110
[18:57:21] mDevicesForAttrCache:
[18:57:21]        AudioAttributes: usage=USAGE_ASSISTANCE_SONIFICATION content=CONTENT_TYPE_UNKNOWN flags=0x800 tags= bundle=null forVolume: true stream: STREAM_SYSTEM(1)
[18:57:21]                AudioDeviceAttributes: role:output type:bt_a2dp addr:48:F3:F3:ED:78:AD name: profiles:[] descriptors:[]
[18:57:21]        AudioAttributes: usage=USAGE_ASSISTANCE_ACCESSIBILITY content=CONTENT_TYPE_UNKNOWN flags=0x800 tags= bundle=null forVolume: true stream: STREAM_ACCESSIBILITY(10)
[18:57:21]                AudioDeviceAttributes: role:output type:bt_a2dp addr:48:F3:F3:ED:78:AD name: profiles:[] descriptors:[]
[18:57:21]        AudioAttributes: usage=USAGE_UNKNOWN content=CONTENT_TYPE_UNKNOWN flags=0x801 tags= bundle=null forVolume: true stream: STREAM_SYSTEM(1)
[18:57:21]                AudioDeviceAttributes: role:output type:speaker addr: name: profiles:[] descriptors:[]
[18:57:21]                AudioDeviceAttributes: role:output type:bt_a2dp addr:48:F3:F3:ED:78:AD name: profiles:[] descriptors:[]
。。。百度查询到:AudioSystemAdapter可能会包含如下功能:
设备检测:检查设备是否支持特定音频特性(如蓝牙、耳机插孔等)。
音频路径管理:动态选择音频流的最佳路径,如扬声器、耳机或蓝牙设备。
音效处理:应用特定的音效效果,如均衡器设置或环绕声模式。
但是从上面日志看不出这些信息,可能信息比较隐蔽。

从上面的示例的主要日志信息,可以看到dumpsys主要包含当前音频流和外设的信息。

2、dumpsys audio日志的主要格式内容

# dumpsys audio //(1)执行命令
[18:57:20]Events log: audio services lifecycle//(2)AudioService 启动时间,大概可以推测出开机时间
[18:57:20]11-22 18:54:07:681 AudioService() //(3)dumpsys audio最重要的内容,设备支持声音流情况,正常看STREAM_MUSIC
[18:57:20]Stream volumes (device: index)
[18:57:20]- STREAM_MUSIC: 
[18:57:20]   Muted: false
[18:57:20]   Muted Internally: false
[18:57:20]   Min: 0  //声音范围
[18:57:20]   Max: 15
[18:57:20]   streamVolume:7 //当前声音大小
[18:57:20]   Current: 2 (speaker): 7, 80 (bt_a2dp): 7, 400 (hdmi): 7, 40000000 (default): 7
[18:57:20]   Devices: bt_a2dp(80) //当前声音通道,蓝牙
[18:57:20]   Volume Group: music
[18:57:20]//(4)音频播放情况日志
[19:00:32]Events log: playback activity as reported through//(5)音频外设连接情况
[18:57:21]  Connected devices://(6)声音通道占用的日志
[18:57:21]Events log: force use (logged before setForceUse() is executed)//(7)音频外设连接断开日志
[18:57:21]Events log: wired/A2DP/hearing aid device connection//(8)声音变化和通道情况
[18:57:21]Events log: volume changes (logged when command received by AudioService)//(9)AudioSystemAdapter 音频管理信息

这里只是根据一个实际的示例日志进行的讲解,
上面的讲解不一定完全正确和全面,仅供参考吧。

三、其他

1、dumpsys audio小结

dumpsys audio 主要能看到

当前设备音频流的指向情况,Stream volumes (device: index)
当前系统音频外设连接情况,Connected devices
声音通道占用情况记录,Events log: force use
音频外设连接断开日志,Events log: wired/A2DP/hearing aid device connection

dumpsys audio 最主要就是上面这几个声音相关信息。
更多的要看具体情况的日志了。

2、dumpsys audio 的源码

dumpsys audio 返回的打印信息,其实是Java代码上打印的,具体源码如下:

framework/base/services/core/java/com/android/server/audio/AudioService.java

@Overrideprotected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;sLifecycleLogger.dump(pw);if (mAudioHandler != null) {pw.println("\nMessage handler (watch for unhandled messages):");mAudioHandler.dump(new PrintWriterPrinter(pw), "  ");} else {pw.println("\nMessage handler is null");}...pw.println("\nAudio routes:");pw.print("  mMainType=0x"); pw.println(Integer.toHexString(mDeviceBroker.getCurAudioRoutes().mainType));pw.print("  mBluetoothName="); pw.println(mDeviceBroker.getCurAudioRoutes().bluetoothName);...pw.println("\n");pw.println("\nSpatial audio:");pw.println("mHasSpatializerEffect:" + mHasSpatializerEffect + " (effect present)");pw.println("isSpatializerEnabled:" + isSpatializerEnabled() + " (routing dependent)");mSpatializerHelper.dump(pw);sSpatialLogger.dump(pw);mAudioSystem.dump(pw);}

可以看到 dumpsys audio 命令返回的数据,都是在 AudioService.java 里面返回打印的;
Audio相关数据很多,有兴趣的可以自己分析研究看看;
如果想要自定义添加一下额外的打印,可以在源码里面添加。

3、使用谷歌文件管理器 GoogleFile 播放音频文件日志:

logct | grep -E "AudioService|AudioTrack"//打开文件管理器后首次播放:
11-23 10:22:26.542   798  1614 I MediaSessionStack: addSession to bottom of stack | record: com.google.android.apps.nbu.files/AudioService (userId=0)
11-23 10:22:26.938   798  1614 I AudioService.FadeOutManager: unfadeOutUid() uid:10074
11-23 10:22:27.148   798   937 I MediaSessionStack: onPlaybackStateChanged - Pushing session to top | record: com.google.android.apps.nbu.files/AudioService (userId=0)
11-23 10:22:27.635   798  1457 I ActivityManager: Background started FGS: Allowed [callingPackage: com.google.android.apps.nbu.files; callingUid: 10074; uidState: TOP ; uidBFSL: [BFSL]; intent: Intent { cmp=com.google.android.apps.nbu.files/.mediaconsumption.audio.service.AudioService (has extras) }; code:PROC_STATE_TOP; tempAllowListReason:<null>; targetSdkVersion:34; callerTargetSdkVersion:34; startForegroundCount:0; bindFromPackage:null: isBindService:true]
11-23 10:22:27.666   798   798 D MediaSessionService: Media button session is changed to com.google.android.apps.nbu.files/AudioService (userId=0)//停止后,再次点击播放
11-23 10:22:58.294  7108  7259 D AudioTrack: getTimestamp_l(16): device stall time corrected using current time 2328289907108
11-23 10:22:58.339   798  1460 I MediaSessionStack: onPlaybackStateChanged - Pushing session to top | record: com.google.android.apps.nbu.files/AudioService (userId=0)
11-23 10:22:58.344  7108  7259 D AudioTrack: getTimestamp_l(16): stale timestamp time corrected, currentTimeNanos: 2318205649000 < limitNs: 2328189081941 < mStartNs: 2328287081941
11-23 10:22:58.344  7108  7259 W AudioTrack: getTimestamp_l(16): retrograde timestamp time corrected, 2328189081941 < 2328329633858

能看到一点日志,比如AudioTrack播放时间,但是没有太多日志,比如用什么设备播放、播放音量等等信息。
所以dumpsys audio 还是可以看到当时比较有用的一些日志的。

4、Android 的声音通道类型

其中streamType定义如下:

STREAM_ALARM:闹钟
STREAM_DTMF:双音多频,拨号键的声音
STREAM_MUSIC:音乐
STREAM_NOTIFICATION:通知
STREAM_RING:铃声
STREAM_SYSTEM:系统
STREAM_VOICE_CALL:通话

Android大概支持上面的声音通道类型,主要使用的是外放的 STREAM_MUSIC。

5、Android–耳机插拔检测(framework篇)

上层到底层的一顿讲解

https://blog.csdn.net/qq_42364999/article/details/143256027

相关文章:

Android adb shell dumpsys audio 信息查看分析详解

Android adb shell dumpsys audio 信息查看分析详解 一、前言 Android 如果要分析当前设备的声音通道相关日志&#xff0c; 仅仅看AudioService的日志是看不到啥日志的&#xff0c;但是看整个audio关键字的日志又太多太乱了&#xff0c; 所以可以看一下系统提供的一个调试指令…...

Python 网络爬虫操作指南

网络爬虫是自动化获取互联网上信息的一种工具。它广泛应用于数据采集、分析以及实现信息聚合等众多领域。本文将为你提供一个完整的Python网络爬虫操作指南&#xff0c;帮助你从零开始学习并实现简单的网络爬虫。我们将涵盖基本的爬虫概念、Python环境配置、常用库介绍。 上传…...

基于FPGA的2FSK调制-串口收发-带tb仿真文件-实际上板验证成功

基于FPGA的2FSK调制 前言一、2FSK储备知识二、代码分析1.模块分析2.波形分析 总结 前言 设计实现连续相位 2FSK 调制器&#xff0c;2FSK 的两个频率为:fI15KHz&#xff0c;f23KHz&#xff0c;波特率为 1500 bps,比特0映射为f 载波&#xff0c;比特1映射为 载波。 1&#xff09…...

JavaScript的基础数据类型

一、JavaScript中的数组 定义 数组是一种特殊的对象&#xff0c;用于存储多个值。在JavaScript中&#xff0c;数组可以包含不同的数据类型&#xff0c;如数字、字符串、对象、甚至其他数组。数组的创建有两种常见方式&#xff1a; 字面量表示法&#xff1a;let fruits [apple…...

第三讲 架构详解:“隐语”可信隐私计算开源框架

目录 隐语架构 隐语架构拆解 产品层 算法层 计算层 资源层 互联互通 跨域管控 本文主要是记录参加隐语开源社区推出的第四期隐私计算实训营学习到的相关内容。 隐语架构 隐语架构拆解 产品层 产品定位&#xff1a; 通过可视化产品&#xff0c;降低终端用户的体验和演…...

JDBC编程---Java

目录 一、数据库编程的前置 二、Java的数据库编程----JDBC 1.概念 2.JDBC编程的优点 三.导入MySQL驱动包 四、JDBC编程的实战 1.创造数据源&#xff0c;并设置数据库所在的位置&#xff0c;三条固定写法 2.建立和数据库服务器之间的连接&#xff0c;连接好了后&#xff…...

Python绘制太极八卦

文章目录 系列目录写在前面技术需求1. 图形绘制库的支持2. 图形绘制功能3. 参数化设计4. 绘制控制5. 数据处理6. 用户界面 完整代码代码分析1. rset() 函数2. offset() 函数3. taiji() 函数4. bagua() 函数5. 绘制过程6. 技术亮点 写在后面 系列目录 序号直达链接爱心系列1Pyth…...

Spring框架特性及包下载(Java EE 学习笔记04)

1 Spring 5的新特性 Spring 5是Spring当前最新的版本&#xff0c;与历史版本对比&#xff0c;Spring 5对Spring核心框架进行了修订和更新&#xff0c;增加了很多新特性&#xff0c;如支持响应式编程等。 更新JDK基线 因为Spring 5代码库运行于JDK 8之上&#xff0c;所以Spri…...

Linux关于vim的笔记

Linux关于vim的笔记&#xff1a;(vimtutor打开vim 教程) --------------------------------------------------------------------------------------------------------------------------------- 1. 光标在屏幕文本中的移动既可以用箭头键&#xff0c;也可以使用 hjkl 字母键…...

linux mount nfs开机自动挂载远程目录

要在Linux系统中实现开机自动挂载NFS共享目录&#xff0c;你需要编辑/etc/fstab文件。以下是具体步骤和示例&#xff1a; 确保你的系统已经安装了NFS客户端。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt-install nfs-common 编辑/etc/fstab文件&#…...

【vue】导航守卫

什么是导航守卫 在vue路由切换过程中对行为做个限制 全局前置守卫 route.beforeEach((to, from, next)) > {// to是切换到的路由// from是正要离开的路由// next控制是否允许进入目标路由next(false); //不允许 }路由级别的导航守卫 const routes [{path: /User,name: U…...

基于Matlab实现LDPC编码

在无线通信和数据存储领域&#xff0c;LDPC&#xff08;低密度奇偶校验码&#xff09;编码是一种高效、纠错能力强大的错误校正技术。本MATLAB仿真程序全面地展示了如何在AWGN&#xff08;加性高斯白噪声&#xff09;信道下应用LDPC编码与BPSK&#xff08;二进制相移键控&#…...

PostgreSQL 中约束Constraints

在 PostgreSQL 中&#xff0c;约束&#xff08;Constraints&#xff09;是用于限制进入数据库表中数据的规则。它们确保数据的准确性和可靠性&#xff0c;通过定义规则来防止无效数据的插入或更新。PostgreSQL 支持多种类型的约束&#xff0c;每种约束都有特定的用途和语法。以…...

✨系统设计时应时刻考虑设计模式基础原则

目录 &#x1f4ab;单一职责原则 (Single Responsibility Principle, SRP)&#x1f4ab;开放-封闭原则 (Open-Closed Principle, OCP)&#x1f4ab;依赖倒转原则 (Dependency Inversion Principle, DIP)&#x1f4ab;里氏代换原则 (Liskov Substitution Principle, LSP)&#x…...

【Linux】多线程(下)

目录 一、生产者消费者模型 1.1 概念 1.2 基于阻塞队列 1.3 POSIX信号量 初始化信号量 销毁信号量 等待信号量 发布信号量 1.4 基于环形队列和POSIX信号量 二、线程池 2.1 概念 2.2 代码 三、封装Linux线程库 四、单例模式 4.1 概念 4.2 单例模式的实现方式 4…...

Element-Plus如何修改日期选择器输入框el-date-picker的圆角

使用 el-date-picker 的 style 属性 :style"{ --el-border-radius-base: 10px }"<!-- 日期 --> <el-form-item label"日期" prop"establishmentDate"><el-date-picker v-model"form.establishmentDate" type"dat…...

skywalking es查询整理

索引介绍 sw_records-all 这个索引用于存储所有的采样记录&#xff0c;包括但不限于慢SQL查询、Agent分析得到的数据等。这些记录数据包括Traces、Logs、TopN采样语句和告警信息。它们被用于性能分析和故障排查&#xff0c;帮助开发者和运维团队理解服务的行为和性能特点。 …...

故障排除-------K8s挂载集群外NFS异常

故障排除-------K8s挂载集群外NFS异常 1. 故障现象2. 原因梳理2.1 排查思路2.2 确认yaml内容2.3 创建k8s内的nfs测试2.3.1 创建nfs和svc2.3.2 测试创建pvc2.3.3 测试结果 2.4 NFS服务端故障排除2.4.1 网络阻断排除2.4.2 排除服务状态问题2.4.3 排查NFS权限问题 3. 故障排除 1. …...

Easyexcel(6-单元格合并)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09;Easyexcel&#xff08;5-自定义列宽&#xff09;Easyexcel&#xff08;6-单…...

解决登录Google账号遇到手机上Google账号无法验证的问题

文章目录 场景小插曲解决方案总结 场景 Google账号在新的设备上登录的时候&#xff0c;会要求在手机的Google上进行确认验证&#xff0c;而如果没有安装Google play就可能出现像我一样没有任何弹框&#xff0c;无法实现验证 小插曲 去年&#xff0c;我在笔记本上登录了Googl…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...