news 2026/7/18 7:07:12

《uni-app跨平台开发完全指南》- 13 -获取设备信息

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《uni-app跨平台开发完全指南》- 13 -获取设备信息

前言

大家好,今天我们聊一个看似简单、实则至关重要的技术话题——如何获取和利用设备信息。在移动应用开发中,许多令人头疼的适配问题,其根源往往就在设备信息的处理上。今天,我们就来一起聊聊这个话题。

一、系统信息

1.1 同步vs异步

很多人都知道用uni.getSystemInfo(),但其实这里有个性能坑:

// 不推荐:每次都调异步APIasyncfunctiongetDeviceInfo(){constinfo=awaituni.getSystemInfo()returninfo}// 推荐:同步获取+缓存letcachedInfo=nullfunctiongetSystemInfo(){if(!cachedInfo){// 首次使用同步API,避免Promise开销cachedInfo=uni.getSystemInfoSync()}returncachedInfo}

为什么同步更好?

  • 无Promise开销,避免微任务队列调度
  • 不用await
  • 应用启动时就应该获取

但同步API有个坑:在极少数情况下可能会阻塞UI。建议:

  • 应用启动时用同步
  • 运行时变化用异步监听

1.2 专业术语解释

constsystemInfo=uni.getSystemInfoSync()// 一下6个字段比较重要:constessentialFields={// 1. 设备识别platform:systemInfo.platform,// "android" | "ios" | "web"model:systemInfo.model,// 具体型号,如"iPhone 13 Pro"// 2. 屏幕信息pixelRatio:systemInfo.pixelRatio,// 设备像素比screenWidth:systemInfo.screenWidth,// 物理像素宽度windowWidth:systemInfo.windowWidth,// 可用宽度// 3. 刘海屏-安全区域safeArea:systemInfo.safeArea,// 安全区域坐标statusBarHeight:systemInfo.statusBarHeight// 状态栏高度}

特别说明一下pixelRatio这个字段,很多新手会忽略它:

像素比的意义:

// 根据像素比加载合适图片functiongetImageUrl(baseUrl,pixelRatio){if(pixelRatio>=3)return`${baseUrl}@3x.png`if(pixelRatio>=2)return`${baseUrl}@2x.png`return`${baseUrl}.png`}// 计算Canvas绘制尺寸functiongetCanvasSize(designSize,pixelRatio){return{width:designSize.width*pixelRatio,height:designSize.height*pixelRatio,styleWidth:designSize.width,styleHeight:designSize.height}}

1.3 平台差异处理

uni-app号称"一套代码,多端运行",但现实是不同平台确实存在差异:

// Platform适配工具类classPlatformAdapter{staticgetStatusBarHeight(){constinfo=uni.getSystemInfoSync()// iOS和Android的状态栏高度if(info.platform==='ios'){// iOS:iPhone X以上有刘海constisNotchScreen=this.isNotchScreen(info)returnisNotchScreen?44:20}elseif(info.platform==='android'){// Android:通常比iOS高,且版本差异大constversion=parseFloat(info.system.split(' ')[1])||0returnversion>=10?28:25}return20// Web端默认}staticisNotchScreen(info){// 判断是否为刘海屏constnotchModels=['iPhone X','iPhone 11','iPhone 12','iPhone 13','iPhone 14','iPhone 15']returnnotchModels.some(model=>info.model.includes(model))}}

二、屏幕适配

2.1 rpx单位

rpx是uni-app的核心创新,让我们深入了解一下rpx吧。

// rpx转换原理functionrpx2px(rpx,windowWidth=375){// 1rpx = windowWidth / 750return(rpx*windowWidth)/750}// 注意事项constdesignWidth=750constdeviceWidth=uni.getSystemInfoSync().windowWidth// 按钮宽度是200rpxconstbuttonDesignWidth=200// 在任何设备上,实际宽度都是:constactualWidth=(buttonDesignWidth/designWidth)*deviceWidth

rpx的好处在于:

  • 750rpx对应设计稿750px
  • 所有元素按屏幕宽度等比缩放
  • 框架自动处理转换

rpx局限性:

  • 不适合需要固定尺寸的场景(如1px边框)
  • 在大屏设备上可能过度拉伸
  • 图片使用rpx需要配合mode="widthFix"

2.2 适配安全区域

随着全面屏普及,安全区域适配成了必修课:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 20:07:25

弹论:金融市场的趋势指南针

在风云变幻、错综复杂的金融投资世界里,投资者们就像在波涛汹涌的大海中航行的水手,迫切地需要一盏能够指引方向的明灯。弹论,这颗投资领域的璀璨明珠,凭借其卓越的判断趋势、分区操作和避免频繁换手的神奇能力,宛如那…

作者头像 李华
网站建设 2026/7/17 9:12:44

仅限资深统计人掌握的技术:R语言实现临床数据因果推断的黄金法则

第一章:临床数据因果推断的R语言实现概述在临床研究中,因果推断旨在从观察性数据中识别变量间的因果关系,而非仅仅依赖相关性分析。R语言凭借其强大的统计建模能力和丰富的扩展包生态系统,成为实现临床数据因果推断的首选工具。通…

作者头像 李华
网站建设 2026/7/17 3:30:48

揭秘Dify 1.7.0音频时长限制:3个你必须掌握的绕行技巧

第一章:Dify 1.7.0音频时长限制的底层机制Dify 1.7.0 版本中对音频输入的处理引入了严格的时长控制策略,旨在优化资源调度与推理延迟。该机制并非简单地在前端拦截超长音频,而是通过后端服务链路中的多个组件协同实现。音频上传预检流程 用户…

作者头像 李华
网站建设 2026/7/18 5:31:48

为什么90%的Dify性能问题都与混合检索缓存有关?

第一章:为什么90%的Dify性能问题都与混合检索缓存有关在高并发AI应用中,Dify作为主流的低代码LLM编排平台,其性能瓶颈往往并非来自模型推理本身,而是源于混合检索(Hybrid Search)与缓存机制的协同失效。大量…

作者头像 李华
网站建设 2026/7/17 4:36:46

文献评阅期末作业写作指南与实践要点分析

科研新人做综述时最痛苦:一搜就是几十页论文,重复、无关、没用。下面三款工具让我效率翻倍。 ① WisPaper(智能学术搜索 文献管理) 官网:https://www.wispaper.ai WisPaper 能通过关键词和语义搜索快速找到相关文献&…

作者头像 李华
网站建设 2026/7/16 17:39:32

文献可视化分析期末课程学习与实践研究

科研新人做综述时最痛苦:一搜就是几十页论文,重复、无关、没用。下面三款工具让我效率翻倍。 ① WisPaper(智能学术搜索 文献管理) 官网:https://www.wispaper.ai WisPaper 能通过关键词和语义搜索快速找到相关文献&…

作者头像 李华